在WSS3.0内创建并使用Event Handler(续)

本文介绍如何为特定模板类型的SharePoint列表注册事件处理程序,并通过示例详细解释了配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇的内容主要参照自 How to: Create an Event Handler Feature
上篇中的方法,只能针对一个具体的列表增加其事件响应,如果针对多个表如何进行呢?一个解决的方法就是针对某个或某些表的模板,只要是该模板生成的列表都可以。
首先介绍一下各种模板的标示ID号:

•100   Generic list

•101   Document library

•102   Survey

•103   Links list

•104   Announcements list

•105   Contacts list

•106   Events list

•107   Tasks list

•108   Discussion board

•109   Picture library

•110   Data sources

•111   Site template gallery

•112   User Information list

•113   Web Part gallery

•114   List template gallery

•115   XML Form library

•116   Master pages gallery

•117   No-Code Workflows

•118   Custom Workflow Process

•119   Wiki Page library

•120   Custom grid for a list

•130   Data Connection library

•140   Workflow History

•150   Gantt Tasks list

•200   Meeting Series list

•201   Meeting Agenda list

•202   Meeting Attendees list

•204   Meeting Decisions list

•207   Meeting Objectives list

•210   Meeting text box

•211   Meeting Things To Bring list

•212   Meeting Workspace Pages list

•301   Blog Posts list

•302   Blog Comments list

•303   Blog Categories list

•1100   Issue tracking

•1200   Administrator tasks list


接下来,说明如何针对这些模板来注册事件处理的Dll,及将其作为一个WSS的Feature。
1. 在 Local_Drive :/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES 下创建一个目录LitwareHandlers。
2. 在该目录下生成两个文件:Feature.xml和Elements.xml。两个文件内容如下:
   Feature.xml
ContractedBlock.gif ExpandedBlockStart.gif Feature.xml
<?xml version="1.0" encoding="utf-8" ?>
<Feature Scope="Web"
   Title
="Litware Event Handler"
   Id
="AF226CD5-8F7A-4d3d-AD9D-5F0254B427C8"
   xmlns
="http://schemas.microsoft.com/sharepoint/">
  
<ElementManifests>
    
<ElementManifest Location="Elements.xml"/>
  
</ElementManifests>
</Feature>
   Elements.xml
ContractedBlock.gif ExpandedBlockStart.gif Elements.xml
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  
<Receivers ListTemplateId="100">
    
<Receiver>
      
<Name>LitwareEventHandler-Add</Name>
      
<Type>ItemAdded</Type>
      
<SequenceNumber>10000</SequenceNumber>
      
<Assembly>LitwareHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=538e86bea3aaf975</Assembly>
      
<Class>LitwareHandlers.OrderHandler</Class>
      
<Data></Data>
      
<Filter></Filter>
    
</Receiver>
    
<Receiver>
      
<Name>LitwareEventHandler-Update</Name>
      
<Type>ItemUpdated</Type>
      
<SequenceNumber>10000</SequenceNumber>
      
<Assembly>LitwareHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=538e86bea3aaf975</Assembly>
      
<Class>LitwareHandlers.OrderHandler</Class>
      
<Data></Data>
      
<Filter></Filter>
    
</Receiver>
  
</Receivers>
</Elements>
有关EventHandler注册的具体内容,请参照以下MSDN的网页。
       Event Registrations
3. 在 Local_Drive :/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES目录下执行:
stsadm -o installfeature -filename LitwareHandlers\Feature.xml

stsadm -o activatefeature -filename LitwareHandlers\Feature.xml -url http://localhost:40000/Customize

iisreset
注意:部署的网站请改为自己需要的。
4. 回到Orders列表,插入新的记录或更新已有的记录,看看是否OrderID会随着改变。

另外,如果想删除上篇中已注册的EventHandler,可以在HandlerRegistrationApp工程中的Program.cs文件中,注释掉原有的注册的语句,增加上删除的方法,具体程序参照以下:
ContractedBlock.gif ExpandedBlockStart.gif Delete
            //orders.EventReceivers.(SPEventReceiverType.ItemAdded, asmName, className);
            //orders.EventReceivers.Add(SPEventReceiverType.ItemUpdated, asmName, className);
            int cnt = orders.EventReceivers.Count;
            for (int i = 0; i 
< cnt; i++)
                orders.EventReceivers[0].Delete();

转载于:https://www.cnblogs.com/Wangyong-Wen/archive/2009/09/23/1572755.html

我想要实现实时通过麦克风说话,从而识别出不同的说话人,标识出来(例如有两个人说话,将两个人音频文字用Speaker 00和Speaker 01标识),使用FunASR结合pyannote.audio模型,以下是我写的代码(我使用的是conda),我想要在此基础上加 WebSocket 前端,通过前端页面点击"开始录音",允许接通麦克风,之后可直接通过前端页面麦克风直接说话,从而识别出不同的说话人,将其音频识别出的文字展示在页面中,标识说明人(例如说话人1、说话人2等),请在文档的基础加上WebSocket 前端,请写出详情的前端代码、路径、样式以及如何启动,以及启动后的结果展示 文档内容: 以下是基于FunASR(语音识别)和pyannote.audio(说话人分离)的实时麦克风多说话人识别完整方案,提供**Conda**部署方式,包含代码和预期运行结果。 ------ ### **一、Conda 部署方案** #### **1. 创建虚拟环境** ```bash conda create -n funasr_pyannote python=3.10 conda activate funasr_pyannote ``` #### **2. 安装FunASR** ```bash pip install -U funasr modelscope torch==2.3.1 # 安装音频处理库 pip install pyaudio ``` #### **3. 安装pyannote.audio** ```bash pip install pyannote.audio # 申请HuggingFace Token(需注册账号) huggingface-cli login # 输入Token ``` > 运行此处后,输入Token,我的HuggingFace的Token为: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 ```bash (funasr_pyannote) D:\FunASR\test4>huggingface-cli login _| _| _| _| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|_|_|_| _|_| _|_|_| _|_|_|_| _| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _| _|_|_|_| _| _| _| _|_| _| _|_| _| _| _| _| _| _|_| _|_|_| _|_|_|_| _| _|_|_| _| _| _| _| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _| _| _| _|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _| _| _| _|_|_| _|_|_|_| To log in, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens . Token can be pasted using &#39;Right-Click&#39;. Enter your token (input will not be visible): Add token as git credential? (Y/n) y Token is valid (permission: fineGrained). The token `FunASR` has been saved to C:\Users\HZH\.cache\huggingface\stored_tokens Your token has been saved in your configured git credential helpers (manager). Your token has been saved to C:\Users\HZH\.cache\huggingface\token Login successful. The current active token is: `FunASR` (funasr_pyannote) D:\FunASR\test4>huggingface-cli whoami HZH520520 ``` #### 4.错误解决方法 > (1)若是在运行下述代码,遇到**` &#39;NoneType&#39; object is not callable`**则表示 **pyannote/speaker-diarization-3.1** 模型访问被拒绝 > > #### . **接受模型使用协议** > > - 访问模型页面登录 Hugging Face 账号: > - pyannote/speaker-diarization-3.1→ 点击 **"Agree to access"** > - pyannote/segmentation-3.0→ 点击 **"Agree to access"** > - **等待 5 分钟** 让授权生效(Hugging Face 缓存刷新需要时间) ------ ### **二、核心代码(两种环境通用)** ```python from funasr import AutoModel from pyannote.audio import Pipeline import pyaudio import numpy as np import torch import os # 设置镜像源加速下载(可选) os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 替换为其他镜像若下载慢 # 初始化模型 asr_model = AutoModel(model="paraformer-zh", vad_model="fsmn-vad") # 中文识别模型 # 加载pyannote说话人分离模型(关键优化:提示用户输入Token或使用环境变量) try: # 注意:替换以下Token为您的HuggingFace Token(从huggingface-cli login获取) pipeline = Pipeline.from_pretrained( "pyannote/speaker-diarization-3.1", use_auth_token="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" # 替换为您的实际Token ) print("pyannote模型加载成功") except Exception as e: print(f"pyannote模型加载失败: {e}") pipeline = None # 降级处理,避免后崩溃 # 实时录音参数(每秒处理16000采样点) CHUNK = 16000 # 1秒音频 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 # 初始化麦克风输入流 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print("开始实时识别(按Ctrl+C停止)...") try: while True: # 读取1秒音频数据 data = stream.read(CHUNK) audio_np = np.frombuffer(data, dtype=np.int16).astype(np.float32) / 32768.0 # 归一化处理 # FunASR语音识别(优化:增加空音频检查) asr_result = asr_model.generate(input=audio_np, batch_size_s=300) text = asr_result[0]["text"] if asr_result and asr_result[0] else "" # pyannote说话人分离(优化:强化异常处理) speaker = "Unknown" if pipeline is not None: # 模型加载成功时才执行 try: diarization = pipeline({"waveform": torch.from_numpy(audio_np).unsqueeze(0), "sample_rate": RATE}) if diarization: # 避免空diarization speaker = next(diarization.itertracks(yield_label=True))[2] # 提取首个说话人标签 except Exception as e: print(f"说话人分离错误: {e}") else: print("警告:pyannote模型未加载,使用默认说话人标签") # 输出带说话人标识的文本(格式:[Speaker X]: 文本) print(f"[Speaker {speaker}]: {text}") except KeyboardInterrupt: # 清理资源 stream.stop_stream() stream.close() p.terminate() print("识别已停止") ``` ### **三、运行结果预测** ```plaintext [Speaker A]: 大家好,今天会议讨论项目进度。 [Speaker B]: 目前后端开发已完成80%。 [Speaker A]: 前端还需要多久? [Speaker C]: 预计下周完成联调。 ``` > **说明**: > > - 每1秒输出一次识别结果 > - `Speaker A/B/C`自动区分不同说话人 > - 中文识别准确率 >90%(实测Paraformer模型)
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值