SharePoint Dataview从URL QueryString中获得参数

博客主要展示了SharePoint Dataview从URL QueryString中获取参数的相关代码,包含一系列的ParameterBinding配置,如对dvt_adhocmode、dvt_adhocfiltermode等参数的绑定,还给出了从QueryString获取_name和_email参数的示例。
6月份otec上, grapecity的朋友demo了一个用sharepoint定制的站点案例, 其中就用到了自定义属性的方法。 后来我在项目中也碰到了自定义属性的问题, 后来问了ted老兄, 才把问题解决了, 非常感谢ted.

用过sharepoint的朋友可能都用到过sharepoint的dataview, 并且通过筛选来达到显示我们需要的数据的目的, 那么如何从url querystring中获得参数, 例如 http://xxx/page.aspx?name=xx&email=xx, 这里, 我们想获取name和email的value. 用frontpage打开页面, 在code窗口里找到该dataview的描述, 找到
<dvwp:ParamBindings><![CDATA[
    <ParameterBindings xmlns="http://schemas.microsoft.com/office/fpddw">
        <ParameterBinding Name="dvt_adhocmode" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_adhocfiltermode" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_fieldsort" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_sortfield" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_groupfield" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_groupdisplay" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_sortdir" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_groupdir" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_grouptype" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_sorttype" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_groupsorttype" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_filterfield" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_filterval" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_filtertype" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_firstrow" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_nextpagedata" Location="Postback;Connection"/>
        <ParameterBinding Name="dvt_apos" Location="Postback;Connection"/>
        <ParameterBinding Name="filterParam" Location="Postback;Connection"/>
        <ParameterBinding Name="UserID" Location="CAMLVariable" DefaultValue="CurrentUserName"/>
        <ParameterBinding Name="Today" Location="CAMLVariable" DefaultValue="CurrentDate"/>
    </ParameterBindings>
]]></dvwp:ParamBindings>
我们可以发现在用筛选的时候, 有两个sharepoint自己提供的属性UserID和Today, 这里我们可以添加自己的
        <ParameterBinding Name="_name" Location="Postback;QueryString(name)" DefaultValue=""/>
        
<ParameterBinding Name="_email" Location="Postback;QueryString(email)" DefaultValue=""/>
这时, 我们就可以通过dataview的筛选来使用自定义参数了。
properties.JPG

转载于:https://www.cnblogs.com/Stephen/archive/2005/11/21/281206.html

<think>我们有一个DataView对象,它是对ArrayBuffer的视图,可以读取和写入多种类型的数据。 现在,我们想要从这个DataView获取一个Int16Array视图。 根据引用[3],我们可以使用TypedArray的一种,其中就包括Int16Array。而且,Int16Array可以直接从ArrayBuffer中创建,并指定字节偏移和长度。 注意:DataView和TypedArray都是操作同一块内存(ArrayBuffer)的不同视图。因此,我们可以通过DataView的buffer属性获取底层的ArrayBuffer,然后基于这个ArrayBuffer创建Int16Array。 步骤: 1. 获取DataView的buffer(ArrayBuffer对象)。 2. 计算需要创建的Int16Array的长度。注意,DataView的字节长度除以2(因为每个16位整数占2个字节)就是Int16Array的元素个数。 3. 创建Int16Array视图,传入ArrayBuffer、字节偏移量(可选,默认为0)和长度(可选,如果不指定则从偏移量开始到缓冲区末尾)。 但是,需要注意的是,字节序的问题。DataView在读取时可以指定字节序(小端或大端),而Int16Array使用平台字节序(通常是小端序)。如果DataView读取时使用的字节序与平台字节序不一致,那么直接创建Int16Array可能会得到不同的值。 因此,如果我们的DataView数据是按照小端序存储(Web Audio API通常使用小端序),并且运行环境也是小端序(绝大多数情况),那么可以直接创建Int16Array。 方法一:直接创建Int16Array ```javascript // 假设我们有一个DataView对象:dataView const buffer = dataView.buffer; // 从整个buffer创建Int16Array视图 const int16Array = new Int16Array(buffer); ``` 但是,如果DataView并不是从buffer的起始位置开始,而是有字节偏移(byteOffset)和长度(byteLength),那么我们需要在创建Int16Array时指定这些参数。 例如,DataView是通过以下方式创建的: ```javascript const dataView = new DataView(buffer, byteOffset, byteLength); ``` 那么,我们在创建Int16Array时,应该从byteOffset开始,并且长度为byteLength/2(因为每个元素2个字节): ```javascript const int16Array = new Int16Array(buffer, byteOffset, byteLength / 2); ``` 方法二:如果我们需要考虑字节序,并且DataView的字节序与平台不一致(这种情况很少见),那么我们可以通过循环读取DataView并填充到新的Int16Array中。但是,这样效率较低,一般不需要。 因此,在大多数情况下,我们可以直接使用方法一。 示例: 假设我们有一个DataView,它包含6个字节(即3个16位整数): ```javascript const buffer = new ArrayBuffer(6); const dataView = new DataView(buffer); // 写入3个16位整数(小端序) dataView.setInt16(0, 1, true); // 在偏移0写入1,小端序 dataView.setInt16(2, 2, true); // 在偏移2写入2,小端序 dataView.setInt16(4, 3, true); // 在偏移4写入3,小端序 // 现在,我们想获取Int16Array const int16Array = new Int16Array(dataView.buffer, 0, 3); console.log(int16Array); // 应该输出 [1,2,3] ``` 注意:如果DataView的byteOffset不为0,那么我们在创建Int16Array时,第二个参数要传入DataView的byteOffset,第三个参数DataView的byteLength除以2(即元素个数)。 总结: 从DataView获取Int16Array的方法: ```javascript const int16Array = new Int16Array(dataView.buffer, dataView.byteOffset, dataView.byteLength / 2); ``` 这样,我们就得到了一个与DataView共享同一块内存的Int16Array视图。 注意:这样创建的Int16Array是只读的吗?不是,它是可写的,写入操作会直接影响底层的ArrayBuffer,从而影响DataView。 另外,如果DataView的byteLength不是2的倍数,那么除以2会出现小数,这时会抛出错误(因为长度必须是整数)。所以,确保byteLength是偶数。 如果byteLength不是偶数,说明数据不完整,我们需要处理这种情况。但通常PCM数据都是按样本对齐的,所以一般不会出现这种情况。 引用说明: 根据引用[3]中TypedArray的构造函数语法:`new TypedArray(buffer [, byteOffset [, length]])`,其中length是元素个数(不是字节数)。 因此,我们传递的第三个参数是元素个数,即字节长度除以2(因为每个元素2字节)。 参考引用[2]:Int16Array每个元素占2个字节。 所以,这个方法正确。</think>### 从 DataView 获取 Int16Array 的方法 要从 DataView 对象中获取 Int16Array 视图,需遵循以下步骤(基于小端字节序): ```javascript // 1. 获取 DataView 的底层 ArrayBuffer const buffer = dataView.buffer; // 2. 计算 Int16Array 的元素数量 const elementCount = dataView.byteLength / 2; // 每个元素占 2 字节 // 3. 创建 Int16Array 视图(指定字节偏移和元素数量) const int16Array = new Int16Array( buffer, dataView.byteOffset, // 保留原始偏移量 elementCount ); ``` ### 关键说明: 1. **字节序处理**: - 上述代码假设数据采用**小端字节序**(Web Audio API 的标准格式) - 若需处理大端字节序数据,需手动转换: ```javascript const bigEndianArray = new Int16Array(elementCount); for (let i = 0; i < elementCount; i++) { bigEndianArray[i] = dataView.getInt16(i * 2, false); // false 表示大端序 } ``` 2. **内存共享特性**: - Int16Array 与原始 DataView **共享同一内存** - 修改 `int16Array` 会直接影响原始数据: ```javascript int16Array[0] = 1024; // 直接修改底层 ArrayBuffer console.log(dataView.getInt16(0)); // 输出 1024 ``` 3. **边界处理**: - 确保 `byteLength` 是偶数(16位=2字节) - 若非偶数需截断处理: ```javascript const validLength = dataView.byteLength - (dataView.byteLength % 2); const elementCount = validLength / 2; ``` ### 完整示例: ```javascript // 创建包含 4 个 16 位整数的 ArrayBuffer const buffer = new ArrayBuffer(8); // 8 字节 = 4 个元素 const dataView = new DataView(buffer); // 填充测试数据 (小端序) dataView.setInt16(0, 100, true); // 位置 0-1 dataView.setInt16(2, -200, true); // 位置 2-3 dataView.setInt16(4, 300, true); // 位置 4-5 dataView.setInt16(6, -400, true); // 位置 6-7 // 转换为 Int16Array const int16Array = new Int16Array( dataView.buffer, dataView.byteOffset, dataView.byteLength / 2 ); console.log(int16Array); // 输出: Int16Array(4) [100, -200, 300, -400] ``` ### 不同视图的内存对比: | 视图类型 | 字节偏移 | 元素数量 | 总字节数 | 内存独立性 | |----------|----------|----------|----------|------------| | **DataView** | `byteOffset` | N/A | `byteLength` | 原始数据视图 | | **Int16Array** | 相同偏移 | `byteLength/2` | 相同 | 共享内存 | > 此方法直接操作二进制缓冲区,效率高于逐字节读取[^5]。实际应用中需注意音频数据的位深度和声道布局,例如 24 位音频需特殊处理[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值