26、深入探索SharePoint服务的消费:URL命令与RPC方法

深入探索SharePoint服务的消费:URL命令与RPC方法

1. URL命令的使用

URL命令通过HTTP GET请求从SharePoint服务器获取XML结果。其调用形式为在特定格式的地址中以查询字符串指定命令,格式如下:

http://server/subsite/_vti_bin/owssvr.dll?Cmd=cmdname&param=value&param=value ...

URL命令不会更改内容数据库,因此无需身份验证。而RPC协议与之类似,但使用HTTP POST发送请求,可包含身份验证信息并更改内容。

以下是一些常见的SharePoint URL命令及其用途:
| 命令 | 参数 | 用途 |
| — | — | — |
| dialogview | dialogview, location, FileDialogFilterValue | 打开用于在文档库中打开或保存文件的对话框视图,或打开保存文件到文档库时使用的自定义属性表单 |
| Display | List, XMLDATA | 对列表执行数据库查询并返回XML或HTML |
| DisplayPost | PostBody, URLBase | 渲染分配给PostBody参数的协作应用标记语言(CAML) |
| ExportList | List | 以CAML格式导出列表的架构 |
| GetProjSchema | 无 | 请求网站的XML架构 |
| GetUsageBlob | BlobType | 获取网站使用情况的信息 |
| HitCounter | Page, Image, Custom, Digits | 在页面的img元素中渲染点击计数器 |
| RenderView | List, View, URLBase | 请求列表视图的内容 |

URL命令还接受一些可选参数来修改返回结果,如下表所示:
| 参数 | 用途 |
| — | — |
| FileDialogFilterValue | 为视图设置过滤器,并根据文件扩展名(如 .doc, .ppt, 或*.xls)从文档库返回指定类型的所有文件列表 |
| FilterFieldn | 指定数据库中字段的名称,n为整数,仅受数据库表允许的字段数量或URL字段允许的长度限制 |
| FilterValuen | 指定用于过滤字段的字符串值,n为整数,仅受URL字段允许的长度限制 |
| SortField | 指定用于排序的字段名称 |
| SortDir | 指示升序(asc)或降序(desc)排序顺序 |
| Using | 指定包含CAML的特定文件,供服务器评估和渲染 |

2. 获取GUID

URL命令的List和View参数是SharePoint内部使用的唯一标识符(GUID)。由于没有URL命令可从名称获取GUID,因此需要使用SharePoint对象模型或Web服务来获取这些值。以下是在三种不同场景下获取列表和视图GUID的方法:

2.1 使用SharePoint对象

在SharePoint内部工作时,可通过SharePoint对象模型获取GUID。以下是获取列表和视图GUID的示例代码:

' Requires: Imports Microsoft.SharePoint.Webcontrols
Function GetListGuid(ByVal lName As String) As String
    Try
        ' Get the web from the current context.
        Dim web As SPWeb = SPControl.GetContextWeb(context)
        ' Get the list by name.
        Dim lst As SPList = web.Lists(lName)
        ' Get the GUID of the list.
        Dim guid As System.Guid = lst.ID
        ' Format the GUID as a string.
        Return ("{" & guid.ToString & "}")
    Catch ex As Exception
        Debug.Write(ex.Message)
        Return ""
    End Try
End Function

Function GetViewGuid(ByVal lName As String, _
  ByVal vName As String) As String
    Try
        ' Get the web from the current context.
        Dim web As SPWeb = SPControl.GetContextWeb(context)
        ' Get the view by name.
        Dim view As SPView = web.Lists(lName).Views(vName)
        ' Get the GUID of the list.
        Dim guid As System.Guid = view.ID
        ' Format the GUID as a string.
        Return ("{" & guid.ToString & "}")
    Catch ex As Exception
        Debug.Write(ex.Message)
        Return ""
    End Try
End Function
2.2 使用Web服务(.NET)

Lists Web服务的GetList方法返回包含列表GUID的XML描述。可使用SelectSingleNode从XML中提取ID属性,示例代码如下:

' Requires a web reference to the Lists.asmx.
Function GetListGUID(ByVal lName As String) As String
    Dim xn As Xml.XmlNode, lws As New Lists.Lists
    Try
        ' Get the XML result from the web service.
        xn = lws.GetList(lName)
        ' Get the GUID (it's the ID attribute of the root element).
        Return xn.SelectSingleNode("//@ID").InnerText
    Catch ex As Exception
        Return ""
    End Try
End Function

' Requires a web reference to the Views.asmx.
Function GetViewGUID(ByVal lName As String, ByVal vName As String) As String
    Dim xn As Xml.XmlNode, vws As New Views.Views
    Try
        ' Get the XML result from the web service.
        xn = vws.GetViewCollection(lName)
        ' Get the GUID (it's the Name attribute)
        ' where @DisplayName matches the view name.
        Return xn.SelectSingleNode("//*[@DisplayName='" & _
          vName & "']/@Name").InnerText
    Catch ex As Exception
        Return ""
    End Try
End Function
2.3 使用Web服务(VBA)

从VBA获取GUID与使用.NET的Web服务类似,但XML对象和错误处理与.NET不同,示例代码如下:

' Requires web reference to Lists.asmx.
Function GetListGUID(lName As String) As String
    On Error Resume Next
    Dim lws As New clsws_Lists
    Dim xn As IXMLDOMNodeList, guid As String
    ' Get the list.
    Set xn = lws.wsm_GetList(lName)
    ' Extract the GUID (it's the ID attribute).
    guid = xn(0).selectSingleNode("//@ID").Text
    ' Return "" if not found.
    If Err Then guid = ""
    ' Return the GUID.
    GetListGUID = guid
End Function

' Requires web reference to Views.asmx.
Function GetViewGUID(lName As String, vName As String) As String
    On Error Resume Next
    Dim vws As New clsws_Views
    Dim xn As IXMLDOMNodeList, guid As String
    ' Get the list's views.
    Set xn = vws.wsm_GetViewCollection(lName)
    ' Extract the GUID (it's the Name attribute).
    guid = xn(0).selectSingleNode("//*[@DisplayName='" & _
      vName & "']/@Name").Text
    ' Return "" if not found.
    If Err Then guid = ""
    ' Return the GUID.
    GetViewGUID = guid
End Function
3. 执行URL命令

URL命令可作为页面上渲染的链接的一部分使用。例如,以下链接显示列表的架构:

<a href="http://wombat1/_vti_bin/owssvr.dll?Cmd=ExportList&List={70F9FF01-15E5-4129-A370-9A31090204E9}">Show list schema</a>

也可以在代码中使用.NET XML对象获取结果XML,示例代码如下:

' .NET: Use URL protocol to get a list's XML.
Function GetListSchema(ByVal lName As String) As String
    Dim xdoc As New Xml.XmlDocument
    Dim guid As String = GetListGUID(lName)
    ' Create a reader for the URL.
    Dim xr As New Xml.XmlTextReader("http://wombat1/_vti_bin/owssvr.dll" & _
      "?Cmd=ExportList&List=" & guid)
    ' Load the response.
    xdoc.Load(xr)
    ' Return the XML as a string.
    Return xdoc.OuterXml
End Function

VBA代码如下:

' VBA: Use URL protocol to get a list's XML.
Function GetListSchema(ByVal lName As String) As String
    Dim guid As String, xdoc As New DOMDocument
    guid = GetListGUID(lName)
    ' Load the response.
    xdoc.Load ("http://wombat1/_vti_bin/owssvr.dll" & _
      "?Cmd=ExportList&List=" & guid)
    ' Return the XML as a string.
    GetListXML xdoc.Text
End Function

可以通过实验URL命令来获得正确的参数组合。通常在代码中使用之前,在浏览器的地址栏或作为HTML链接编写命令会更容易。例如:

<a href="http://wombat1/_vti_bin/owssvr.dll?Cmd=Display&List={70F9FF01-15E5-4129-A370-9A31090204E9}&XMLDATA=TRUE">Display list XML (minimal)</a><br>
<a href="http://wombat1/_vti_bin/owssvr.dll?Cmd=Display&List={70F9FF01-15E5-4129-A370-9A31090204E9}&XMLDATA=TRUE&Query=*">Display list XML (full)</a>

对于复杂查询,使用Web服务或RPC通常更容易。

4. 使用RPC

SharePoint远程过程调用(RPC)方法提供了另一种远程更改SharePoint站点和获取内容的方式。RPC方法与前面讨论的URL命令类似,但使用HTTP POST而不是GET发送请求。

当希望使用协作应用标记语言(CAML)而不是通过Web服务方法来编写更改或查询时,可以使用RPC方法。CAML是一种使用XML而不是像Visual Basic .NET这样的过程编程语言来对SharePoint进行编程的声明性方法,具有以下优点:
- RPC方法可以作为内容包含在网页上,而不是作为服务器端代码。
- 用户可以在不安装Web部件或其他代码的情况下,使用CAML编写和运行自己的查询。
- SharePoint模板和描述使用CAML,因此理解它有助于创建自定义站点定义。
- RPC比Web服务的开销更小。

不过,CAML是一项需要学习的技能,而且相当高级。对于不使用Web部件自定义SharePoint站点,RPC是合理的选择。

以下是一些常见的SharePoint RPC方法及其用途:
| 方法 | 参数 | 用途 |
| — | — | — |
| Cltreq | UL, STRMVER, ACT, URL | 执行Web讨论操作,如添加、编辑或删除与网页或存储在文档库中的文档相关的讨论 |
| Delete | ID, List, NextUsing, owsfileref | 删除列表中的项目 |
| DeleteField | List, Field, owshiddenversion | 从列表中删除字段 |
| DeleteList | List, NextUsing | 删除列表 |
| DeleteView | List, View | 删除视图 |
| ImportList | Title, RootFolder, ListSchema | 根据指定的XML架构创建列表 |
| ModListSettings | List, OldListTitle, NewListTitle, Description, ReadSecurity, WriteSecurity, SchemaSecurity | 更改列表的属性 |
| NewField | List, FieldXML, AddToDefaultView, owshiddenversion | 向指定列表添加新字段 |
| NewList | ListTemplate, Description, displayOnLeft, VersioningEnabled, GlobalMtgDataList, AllowMultiVote, showUsernames | 创建指定类型的列表,如联系人、讨论或调查 |
| NewViewPage | List, PageURL, DisplayName, HiddenView | 向列表添加新的视图页面 |
| NewWebPage | 无 | 在文档库中创建新的Web部件页面或新的基本页面 |
| ReorderFields | List, ReorderedFields | 更改列表中字段在数据输入表单上的显示顺序 |
| Save | ID, List, NextUsing | 保存新列表或保存对现有列表的修改 |
| SiteProvision | CreateLists | 向现有的SharePoint站点添加默认列表集 |
| UpdateField | List, FieldXML, owshiddenversion | 修改列表中现有字段的架构 |

5. 为RPC准备页面

由于RPC方法可以更改内容,因此POST请求必须包含用户信息,以便SharePoint对方法进行身份验证和授权。为此,在网页上执行RPC命令需要采取以下特殊步骤:
1. 向页面添加FormDigest控件。
2. 创建一个表单元素,其中包含要执行的方法,并将其内容POST到 http://server/site/_vti_bin/owssvr.dll
3. 创建一个客户端脚本,在表单提交之前将FormDigest控件的值插入到表单中。
4. 添加一个提交按钮来提交表单。

例如,创建一个用于测试RPC命令的页面 RPCDemo.aspx ,在页面头部添加以下脚本:

<!-- This directive registers the FormDigest WebControl -->
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" %>
<html dir="ltr">
<HEAD>
<!-- Add this script to include user info in the CAML -->
<script type="text/javascript" language="JavaScript">
function InsertSecurityValidation(oForm)
{
    var sFormDigest = '<SetVar Name="_ _REQUESTDIGEST">' +
      oForm.elements["_ _REQUESTDIGEST"].value + "</SetVar>\n";
    var oPostBody = oForm.elements["PostBody"];
    var rePattern = /<\/Method>/g;
    oPostBody.value = oPostBody.value.replace(rePattern, sFormDigest + "</Method>");
}
</script>
</HEAD>

然后在SharePoint生成的关闭表单标签之后添加以下表单:

<!-- SharePoint web part zones omitted here -->
<\form>
<!-- Form used to post RPC commands to SharePoint -->
<form class="ms-formbody" method="post"
  action="http://wombat1/_vti_bin/owssvr.dll"
  onsubmit="InsertSecurityValidation(this);"
  target="result" >
  <!-- This control provides user information -->
  <SharePoint:FormDigest runat="server"/>
  Enter CAML containing RPC methods and click Run to see the result:
  <input type="hidden" name="Cmd" value="DisplayPost" />
  <!-- Source for CAML -->
  <textarea name="PostBody" style="width=100%;height=200">
  </textarea>
  <br>
  <input type="submit" value="Run" />
  <input type="reset" value="Clear" />
  <br>
  Result:
  <!-- Target for results -->
  <IFRAME name="result" src="::blank.htm" style="width=100%;height=200"/>
</form>

一旦对结果满意,可以使用隐藏输入控件将CAML硬编码到新网页上,如下所示:

<!-- Embedded RPC -->
<form class="ms-formbody" method="post"
  action="http://wombat1/_vti_bin/owssvr.dll"
  onsubmit="InsertSecurityValidation(this);"
  target="_blank" >
  <!-- This control provides user information -->
  <SharePoint:FormDigest runat="server"/>
  Click Run to see the result in a pop-up window.
  <input type="hidden" name="Cmd" value="DisplayPost" />
  <!-- Source for CAML -->
  <input type="hidden" name="PostBody" value="
      <Method ID='0,DisplayPost'>
          <SetList Scope='Request'>Lists</SetList>
          <SetVar Name='View'>EnumLists</SetVar>
          <SetVar Name='Cmd'>DisplayPost</SetVar>
          <SetVar Name='XMLDATA'>TRUE</SetVar>
    </Method>" />
  <br>
  <input type="submit" value="Run" />
</form>

别忘了在新页面的头部添加 InsertSecurityValidation 脚本。这个示例将结果显示在新的弹出窗口中( target="_blank" ),而不是在页面的内联框架中。

6. 常见RPC任务

以下是一些常见的使用RPC执行的任务示例,在这些示例中,需要将提供的列表和视图的GUID替换为自己站点的值。

6.1 识别列表

RPC方法通过列表的GUID来识别其作用的列表。可以通过调用DisplayPost方法并将View参数设置为EnumLists,通过RPC获取站点中所有列表的GUID,示例如下:

<Method ID="0,DisplayPost">
  <SetList Scope="Request">Lists</SetList>
  <SetVar Name="View">EnumLists</SetVar>
  <SetVar Name="Cmd">DisplayPost</SetVar>
  <SetVar Name="XMLDATA">TRUE</SetVar>
</Method>

找到所需列表的GUID后,在SetList元素中指定该值。例如,以下方法导出公告列表:

<Method ID="0,ExportList">
  <SetList Scope="Request">{41D7D046-1E0A-4FB2-A096-C063D210D552}</SetList>
  <SetVar Name="Cmd">ExportList</SetVar>
</Method>
6.2 组合多个方法

使用Batch元素可以在单个POST请求中组合两个或多个RPC方法。例如,以下CAML向公告列表添加两个项目:

<ows:Batch Version="6.0.2.5608" OnError="Return">
  <Method ID="Anouncement1">
    <SetList>{41D7D046-1E0A-4FB2-A096-C063D210D552}</SetList>
    <SetVar Name="ID">New</SetVar>
    <SetVar Name="Cmd">Save</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Title">Announcement Title1</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Body">Announcement text</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Expires">2005-09-14T00:00:00Z</SetVar>
  </Method>
  <Method ID="Announcement2">
    <SetList>{41D7D046-1E0A-4FB2-A096-C063D210D552}</SetList>
    <SetVar Name="ID">New</SetVar>
    <SetVar Name="Cmd">Save</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Title">Announcement Title2</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Body">Announcement text</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Expires">2005-12-18T00:00:00Z</SetVar>
  </Method>
</ows:Batch>

Batch元素的OnError属性决定了如果其中一个方法失败时的处理方式。Return设置会使方法在发生错误时立即停止;Continue设置会使SharePoint跳过有错误的方法并继续执行下一个方法。

6.3 查询列表

使用Display方法对列表执行查询并仅返回特定的字段集。例如,以下查询使用过滤条件 introduced=2000 从列表中返回三个字段(注意字段名称区分大小写):

<Method ID="0,Display">
  <SetList Scope="Request">{5E6561D4-7048-45AB-BFA1-2D1991BAF3B1}</SetList>
  <SetVar Name="Cmd">Display</SetVar>
  <SetVar Name="XMLDATA">False</SetVar>
  <SetVar Name="Query">name Title introduced</SetVar>
  <SetVar Name="FilterField1">introduced</SetVar>
  <SetVar Name="FilterValue1">2000</SetVar>
</Method>

对于需要过滤或排序的查询,也可以指定定义这些条件的视图。例如,以下查询返回由列表视图指定的列表中的项目:

<Method ID="0,Display">
  <SetList Scope="Request">{5E6561D4-7048-45AB-BFA1-2D1991BAF3B1}</SetList>
  <SetVar Name="Cmd">Display</SetVar>
  <SetVar Name="XMLDATA">False</SetVar>
  <SetVar Name="View">{21E03766-D0CF-4942-B2C0-DF4E3706DD50}</SetVar>
</Method>
6.4 创建列表

使用NewList方法在站点上创建新的列表或文档库。ListTemplate参数决定了创建的列表类型(具体类型可参考相关文档)。

通过以上介绍,我们详细了解了如何使用URL命令和RPC方法来消费SharePoint服务,包括获取GUID、执行命令以及完成常见任务等方面。这些技术为开发人员和管理员提供了强大的工具,以满足不同的SharePoint使用需求。

深入探索SharePoint服务的消费:URL命令与RPC方法

7. 不同方法的对比与选择建议

在使用SharePoint服务时,URL命令和RPC方法各有特点,以下是对它们的详细对比以及选择建议:

对比项 URL命令 RPC方法
请求方式 HTTP GET HTTP POST
是否需要身份验证 否(不更改内容数据库) 是(可更改内容)
数据交互方式 以查询字符串指定命令获取XML结果 使用CAML编写更改或查询
适用场景 简单查询,获取只读信息 复杂操作,如创建、删除、修改列表等
技术难度 较低,易于在浏览器地址栏或HTML链接中使用 较高,需要学习CAML
性能开销 相对较小 比Web服务开销小,比URL命令大

选择建议:
- 如果只是进行简单的查询,获取列表的基本信息,如显示列表架构、获取列表的XML数据等,URL命令是一个不错的选择,它简单易用,无需身份验证。
- 当需要进行复杂的操作,如创建列表、删除列表项、修改字段等,并且希望使用声明性的CAML语言来编写操作逻辑时,RPC方法更为合适。虽然学习成本较高,但它提供了更强大的功能和更灵活的操作方式。

8. 实际应用案例分析

以下通过一个具体的实际应用案例,展示如何综合运用URL命令和RPC方法来满足业务需求。

假设我们要开发一个SharePoint应用,实现对一个项目列表的管理,包括显示项目列表、添加新项目和删除项目等功能。

8.1 显示项目列表

使用URL命令的Display方法来显示项目列表的基本信息。在页面上添加一个链接,点击链接即可获取列表的XML数据:

<a href="http://wombat1/_vti_bin/owssvr.dll?Cmd=Display&List={项目列表GUID}&XMLDATA=TRUE">Display project list XML</a>

在代码中,可以使用.NET XML对象获取并处理这些数据:

Function GetProjectListXML() As String
    Dim xdoc As New Xml.XmlDocument
    Dim guid As String = "{项目列表GUID}"
    Dim xr As New Xml.XmlTextReader("http://wombat1/_vti_bin/owssvr.dll?Cmd=Display&List=" & guid & "&XMLDATA=TRUE")
    xdoc.Load(xr)
    Return xdoc.OuterXml
End Function
8.2 添加新项目

使用RPC方法的Batch元素来添加新项目。首先,准备好包含新项目信息的CAML代码:

<ows:Batch Version="6.0.2.5608" OnError="Return">
  <Method ID="NewProject1">
    <SetList>{项目列表GUID}</SetList>
    <SetVar Name="ID">New</SetVar>
    <SetVar Name="Cmd">Save</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#项目名称">项目名称1</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#项目描述">项目描述1</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#开始日期">2024-01-01T00:00:00Z</SetVar>
  </Method>
</ows:Batch>

然后,在页面上创建一个表单,将CAML代码作为表单数据提交:

<form class="ms-formbody" method="post"
  action="http://wombat1/_vti_bin/owssvr.dll"
  onsubmit="InsertSecurityValidation(this);"
  target="_blank" >
  <SharePoint:FormDigest runat="server"/>
  <input type="hidden" name="Cmd" value="DisplayPost" />
  <input type="hidden" name="PostBody" value='
    <ows:Batch Version="6.0.2.5608" OnError="Return">
      <Method ID="NewProject1">
        <SetList>{项目列表GUID}</SetList>
        <SetVar Name="ID">New</SetVar>
        <SetVar Name="Cmd">Save</SetVar>
        <SetVar Name="urn:schemas-microsoft-com:office:office#项目名称">项目名称1</SetVar>
        <SetVar Name="urn:schemas-microsoft-com:office:office#项目描述">项目描述1</SetVar>
        <SetVar Name="urn:schemas-microsoft-com:office:office#开始日期">2024-01-01T00:00:00Z</SetVar>
      </Method>
    </ows:Batch>' />
  <input type="submit" value="Add Project" />
</form>
8.3 删除项目

使用RPC方法的Delete元素来删除项目。准备好包含删除项目信息的CAML代码:

<Method ID="0,Delete">
  <SetList Scope="Request">{项目列表GUID}</SetList>
  <SetVar Name="ID">{项目ID}</SetVar>
  <SetVar Name="Cmd">Delete</SetVar>
</Method>

同样,在页面上创建一个表单,将CAML代码作为表单数据提交:

<form class="ms-formbody" method="post"
  action="http://wombat1/_vti_bin/owssvr.dll"
  onsubmit="InsertSecurityValidation(this);"
  target="_blank" >
  <SharePoint:FormDigest runat="server"/>
  <input type="hidden" name="Cmd" value="DisplayPost" />
  <input type="hidden" name="PostBody" value='
    <Method ID="0,Delete">
      <SetList Scope="Request">{项目列表GUID}</SetList>
      <SetVar Name="ID">{项目ID}</SetVar>
      <SetVar Name="Cmd">Delete</SetVar>
    </Method>' />
  <input type="submit" value="Delete Project" />
</form>
9. 总结与展望

通过对SharePoint服务的URL命令和RPC方法的深入学习,我们了解到这些技术为SharePoint的开发和管理提供了丰富的功能和灵活的操作方式。URL命令适用于简单的信息获取,而RPC方法则更适合复杂的操作和数据修改。

在实际应用中,我们可以根据具体的业务需求选择合适的方法,并且可以将它们结合使用,以实现更强大的功能。同时,需要注意的是,RPC方法使用的CAML语言需要一定的学习成本,开发人员需要掌握其基本语法和使用方法。

展望未来,随着SharePoint技术的不断发展,可能会出现更多更便捷的服务消费方式,同时对安全性和性能的要求也会越来越高。开发人员需要不断学习和掌握新的技术,以更好地满足业务需求。

以下是一个使用mermaid绘制的流程图,展示了在实际应用中选择URL命令和RPC方法的决策过程:

graph TD
    A[业务需求] --> B{操作类型}
    B -->|简单查询| C[URL命令]
    B -->|复杂操作| D[RPC方法]
    C --> E[获取信息]
    D --> F[编写CAML代码]
    F --> G[准备表单提交]
    G --> H[执行操作]

通过这个流程图,我们可以更清晰地看到在不同业务需求下如何选择合适的方法来消费SharePoint服务。

【完美复现】面向配电网韧性提升的移动储能预布局动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
先看效果: https://pan.quark.cn/s/3756295eddc9 在C#软件开发过程中,DateTimePicker组件被视为一种常见且关键的构成部分,它为用户提供了图形化的途径来选取日期时间。 此类控件多应用于需要用户输入日期或时间数据的场景,例如日程管理、订单管理或时间记录等情境。 针对这一主题,我们将细致研究DateTimePicker的操作方法、具备的功能以及相关的C#编程理念。 DateTimePicker控件是由.NET Framework所支持的一种界面组件,适用于在Windows Forms应用程序中部署。 在构建阶段,程序员能够通过调整属性来设定其视觉形态及运作模式,诸如设定日期的显示格式、是否展现时间选项、预设的初始值等。 在执行阶段,用户能够通过点击日历图标的下拉列表来选定日期,或是在文本区域直接键入日期信息,随后按下Tab键或回车键以确认所选定的内容。 在C#语言中,DateTime结构是处理日期时间数据的核心,而DateTimePicker控件的值则表现为DateTime类型的实例。 用户能够借助`Value`属性来读取或设定用户所选择的日期时间。 例如,以下代码片段展示了如何为DateTimePicker设定初始的日期值:```csharpDateTimePicker dateTimePicker = new DateTimePicker();dateTimePicker.Value = DateTime.Now;```再者,DateTimePicker控件还内置了事件响应机制,比如`ValueChanged`事件,当用户修改日期或时间时会自动激活。 开发者可以注册该事件以执行特定的功能,例如进行输入验证或更新关联的数据:``...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值