Microsoft Identity Manager 2016 的 BHOLD 开发人员参考

BHOLD 核心模块可以处理脚本命令。 可以通过直接在 .NET 项目中使用 bscript.dll 来完成。 还与 Web 服务 b1scriptservice.asmx 接互。

在执行脚本之前,应收集脚本中的所有信息以撰写此脚本。 可以从以下来源收集此信息:

  • 用户输入
  • BHOLD 数据
  • 应用程序
  • 其他

可以使用脚本对象的 GetInfo 函数检索 BHOLD 数据。 有一个命令的完整列表,这些命令可以显示存储在 BHOLD 数据库中的所有数据。 但是,显示的数据受登录用户的视图权限的约束。 结果采用可分析的 XML 文档的形式。

另一个信息源可以是 BHOLD 控制的应用程序之一。 应用程序管理单元具有特殊函数 FunctionDispatch,可用于显示特定于应用程序的信息。 这还显示为 XML 文档。

最后,如果没有其他方法,脚本可以直接包含指向其他应用程序或系统的命令。 BHOLD 服务器上额外软件的无安装可能会破坏整个系统的安全性。

所有这些信息都放入一个 XML 文档中,并分配给 BHOLD 脚本对象。 该对象将本文档与预定义的函数组合在一起。 预定义函数是将脚本输入文档转换为 BHOLD 命令文档的 XSL 文档。

BHOLD 脚本处理

命令的执行顺序与文档中的顺序相同。 如果一个函数失败,则执行的所有命令都会回滚。

脚本对象

本部分介绍如何使用脚本对象。

检索 BHOLD 信息

GetInfo 函数用于从 BHOLD 授权系统中的可用数据检索信息。 该函数需要一个函数名称,最终需要一个或多个参数。 如果此函数成功,则以 XML 文档的形式返回 BHOLD 对象或集合。

如果函数未成功,GetInfo 函数将返回空字符串或错误。 错误说明和编号可用于获取有关失败的详细信息。

GetInfo 函数“FunctionDispatch”可用于从 BHOLD 系统控制的应用程序检索信息。 此函数需要三个参数:应用程序的 ID、ASI 中定义的调度函数,以及具有 ASI 支持信息的 XML 文档。 如果函数成功,则结果在结果对象中以 XML 格式提供。

以下代码片段是 GetInfo 的一个简单的 C# 示例:

ScriptProcessor myScriptProcessor = new ScriptProcessor();
myScriptProcessor.Initializae("CORP\\b1user");
myScriptProcessor.GetInfo("OrgUnit", "1");

同样,也可以通过 web 服务 访问 b1scriptservice 对象。 为此,可以使用 http://<服务器>:5151/BHOLD/Core/b1scriptservice.asmx 向项目添加 Web 引用,其中 <服务器> 是安装了 BHOLD 二进制文件的服务器。 有关详细信息,请参阅 向 Visual Studio 项目添加 Web 服务引用

以下示例演示如何从 Web 服务使用 GetInfo 函数。 此代码检索组织单位,该组织单位的 OrgID 为 1,然后在屏幕上显示该组织单位的名称。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace bhold_console
{
    class Program
    {
        static void Main(string[] args)
        {
             var bholdService = new BHOLDCORE.B1ScriptService();
             bholdService.Url = "http://app1.corp.contoso.com:5151/BHOLD/Core/b1scriptservice.asmx";
             string orgname= "";

             if (args.Length == 3)
             {
                 //Use explicit credentials from command line
                 bholdService.UseDefaultCredentials = false;
                 bholdService.Credentials = new System.Net.NetworkCredential(args[0], args[1], args[2]);
                 bholdService.PreAuthenticate = true;
             }
             else
             {
                 bholdService.UseDefaultCredentials = true;
                 bholdService.PreAuthenticate = true;
             }

             //Load BHOLD information into an xml document and loop through document to find the bholdDescription value
             var myOrgUnit = new System.Xml.XmlDocument();
             myOrgUnit.LoadXml(bholdService.GetInfo("OrgUnit","1","","");

            XmlNodeList myList = myOrgUnit.SelectNodes(("//item");

            foreach (XmlNode myNode in myList)
            {
                for (int i = 0; i < myNode.ChildNodes.Count; i++)
                {
                    if (myNode.ChildNodes[i].InnerText.ToString() == "bholdDescription")
                    {
                        orgname = myNode.ChildNodes[i + 1].InnerText.ToString();
                    }
                }
            }

            System.Console.WriteLine("The Organizational Unit Name is: " + orgname);

        }
    }
}

以下 VBScript 示例通过 SOAP 和 GetInfo 使用 Web 服务。 有关 SOAP 1.1、SOAP 1.2 和 HTTP POST 的其他示例,请参阅 BHOLD 托管参考部分,也可以直接从浏览器导航到 Web 服务并在此处查看它们。

Dim SOAPRequest
Dim SOAPParameters
Dim SOAPResponse
Dim xmlhttp

Set xmlhttp = CreateObject("Microsoft.XMLHTTP")

xmlhttp.open "POST", "http://app1.corp.contoso.com:5151/BHOLD/Core/b1scriptservice.asmx", False, "CORP\Administrator", "abc123*2k"

xmlhttp.setRequestHeader "Content-type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", "http://B1/B1ScriptService/GetInfo"

SOAPRequest = "<?xml version='1.0' encoding='utf-8'?> <soap:Envelope" & vbCRLF
SOAPRequest = SOAPRequest & " xmlns:xsi=""http://" & vbCRLF
SOAPRequest = SOAPRequest & " www.w3.org/2001/XMLSchema-instance""" & vbCRLF
SOAPRequest = SOAPRequest & " xmlns:xsd=""http://www.w3.org/2001/XMLSchema""" & vbCRLF
SOAPRequest = SOAPRequest & " xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" & vbCRLF
SOAPRequest = SOAPRequest & " <soap:Body>" & vbCRLF
SOAPRequest = SOAPRequest & " <GetInfo xmlns=""http://B1/B1ScriptService"">" & vbCRLF
SOAPRequest = SOAPRequest & " <functionName>OrgUnit</functionName>" & vbCRLF
SOAPRequest = SOAPRequest & " <parameter1>1</parameter1>" & vbCRLF
SOAPRequest = SOAPRequest & " <parameter2></parameter2>" & vbCRLF
SOAPRequest = SOAPRequest & " <parameter3></parameter3>" & vbCRLF
SOAPRequest = SOAPRequest & " </GetInfo>" & vbCRLF
SOAPRequest = SOAPRequest & " </soap:Body>" & vbCRLF
SOAPRequest = SOAPRequest & " </soap:Envelope>"
MsgBox SOAPRequest

xmlhttp.send SOAPRequest 

SOAPResponse = xmlhttp.responseText

MsgBox SOAPResponse

执行脚本

BScript 对象的 ExecuteScript 函数可用于执行脚本。 此函数需要两个参数。 第一个参数是包含脚本要使用的自定义信息的 XML 文档。 第二个参数是要使用的预定义脚本的名称。 InIn the BHOLD predefined scripts directory, here be an XSL document with the name as the function, but with the .xsl extension.

如果函数未成功,ExecuteScript 函数将返回值 False。 错误说明和数字可用于知道出了什么问题。 下面是使用 ExecuteXML Web 方法的示例。 此方法调用 ExecuteScript。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var bholdService = new BHOLDCORE.B1ScriptService();
            bholdService.Url = "http://app1.corp.contoso.com:5151/BHOLD/Core/b1scriptservice.asmx";

            if (args.Length == 3)
            {
                //Use explicit credentials from command line
                bholdService.UseDefaultCredentials = false;
                bholdService.Credentials = new System.Net.NetworkCredential(args[0], args[1], args[2]);
                bholdService.PreAuthenticate = true;
            }
            else
            {
                bholdService.UseDefaultCredentials = true;
                bholdService.PreAuthenticate = true;
            }
            System.Console.WriteLine( "Add user #3 to role #44, result: {0}", bholdService.ExecuteXml(roleAddUser("44", "3")) );
            System.Console.WriteLine("Add user D1 to role 'MR-OU2 No Users', result: {0}", bholdService.ExecuteXml(roleAddUser("MR-OU2 No Users", "D1")));

        }

        private static System.Xml.XmlNode roleAddUser(string roleId, string userId)
        {
            var script = new System.Xml.XmlDocument();
            script.LoadXml(string.Format("<functions>"
                                        +"  <function name='roleadduser' roleid='{0}' userid='{1}' />"
                                        +"</functions>",
                                        roleId,
                                        userId)
                           );
            return script.DocumentElement;

BholdScriptResult

执行 executescript 函数后,可以使用此 GetInfo 函数。 该函数返回一个 XML 格式的字符串,其中包含完整的执行报告。 脚本节点包含执行的脚本的 XML 结构。

对于在执行脚本期间失败的每个函数,节点函数会随节点名称一起添加。 将 ExecuteXML 和 Error 添加到文档末尾,将添加所有生成的 ID。

请注意,仅添加包含错误的函数。 错误号“0”表示未执行函数。

<Bhold>
  <Script>
    <functions>
      <function name="OrgUnitadd" description="OrgUnit1" parentid="root" orgtypeid="root" return="@ID@"/>     
      <function name="roleaddOrgUnit" OrgUnitid="OrgUnit1" roleid="Role1_OrgUnit1" return="@ID@"/>      
    </functions>
  </Script>
  <Function>
    <Name>OrgUnitadd</Name>
    <ExecutedXML>
      <function name="OrgUnitadd" description="OrgUnit1" parentid="root" orgtypeid="root" return="@ID@"/>
    </ExecutedXML>
    <Error Number="5" Description="Violation of UNIQUE KEY constraint 'IX_OrgUnits'. Cannot insert duplicate key in object 'dbo.OrgUnits'.
The statement has been terminated."/>
  </Function>
  <Function>
    <Name>roleaddOrgUnit</Name>
    <ExecutedXML>
      <function name="roleaddOrgUnit" OrgUnitid="OrgUnit1" roleid="Role1_OrgUnit1" return="@ID@"/>
    </ExecutedXML>
    <Error Number="0" Description=""/>
  </Function>
  <IDS>
    <ID name="@ID@">35</ID>
  </IDS>
</Bhold>

ID 参数

ID 参数获得特殊处理。 非数值用作搜索值,用于查找 BHOLD 数据存储中的相应实体。 当搜索值不唯一时,将返回符合搜索值的第一个实体。

若要区分数字搜索值与 ID,可以使用前缀。 当搜索值的前六个字符等于“no_id:”时,在值用于搜索之前,将剥离这些字符。 可以使用 SQL 通配符“%”。

以下字段与搜索值一起使用:

ID 类型 搜索字段
OrgUnitID 说明
roleID 说明
taskID 说明
userID DefaultAlias

编写访问权限和权限脚本

活动服务器页中的服务器端代码用于执行脚本。 因此,访问脚本意味着访问这些页面。 BHOLD 系统维护有关自定义页面入口点的信息。 此信息包括起始页和函数说明(应支持多种语言)。

用户有权输入自定义页面并执行脚本。 每个入口点都显示为任务。 通过角色或单元获取此任务的每个用户都可以执行相应的函数。

菜单中的新函数显示用户可执行的所有自定义函数。 因为脚本可以在与登录用户不同的标识下在 BHOLD 系统中执行作。 可以授予执行一个特定作的权限,而无需对任何对象进行监督。 例如,对于只允许向公司输入新客户的员工来说,这可能很有用。 这些脚本还可用于创建自注册页。

命令脚本

命令脚本包含 BHOLD 系统执行的函数列表。 该列表以符合以下定义的 XML 文档编写:

命令脚本 <functions>functions</functions>
functions 函数 {function}
功能 <函数名称=“functionName” functionParameters [return] (/> | > parameterList </ function>)
functionName 如以下部分所述,有效的函数名称。
functionParameters { functionParameter }
functionParameter parameterName = “parameterValue”
parameterName 有效的参数名称。
parameterValue @variable@ |价值
价值 有效的参数值。
parameterList <参数> {parameterItem} </parameters>
parameterItem <参数名称=“parameterName”> parameterValue </parameter>
return return=“@variable@”
变量 自定义变量名称。

XML 具有以下特殊字符的翻译:

XML 字符
&amp; &
&lt; <
&gt; >
&quot; "
&apos;

这些 XML 字符可用于标识符,但不建议使用这些字符。

下面的代码演示了包含三个函数的有效命令文档的示例:

<functions>

   <functionname="OrgUnitAdd" parentID="34" description="Acme Inc." orgtypeID="5" return="@UnitID@" />

   <function name="UserAdd" description="John Doe" alias="jdoe" languageID="1" OrgUnitID="@UnitID@" />

   <function name="TaskAddFile" taskID="93" path="/customers/purchase">
      <parameters>
         <parameter name="history"> True</parameter>
      </parameters>
   </function>

</functions>

函数 OrgUnitAdd 将创建的单元的 ID 存储在名为 UnitID 的变量中。 此变量用作 UserAdd 函数的输入。 不使用此函数的返回值。 以下各节介绍所有可用的函数、所需的参数及其返回值。

执行函数

本部分介绍如何使用执行函数。

ABAAttributeRuleAdd

在特定属性类型上创建新的属性规则。 属性规则只能链接到一个属性类型。

指定的属性规则可以链接到所有可能的属性类型。

无法使用“ABAattributeruletypeupdate”命令更改 RuleType。 要求按唯一属性的说明。

论据 类型
说明 文本
RuleType 指定属性规则的类型。 必须包括属性规则类型的其他参数的类型。 以下规则类型值有效:
  • 0:正则表达式(添加参数“value”)。
  • 1:值(添加参数“operator”和“value”)。
  • 2:值列表。
  • 3:Range(添加参数“rangemin”和“rangemax”)。
  • 4:Age(添加参数“operator”和“value”)。
InvertResult ["0"|"1"|"N"|"Y"]
AttributeTypeID 文本
可选自变量 类型
操作员 Text
注意:如果 RuleType 为 1 或 4,则此参数是必需的。 可能的值为“=”、“<”或“>”。 XML 标记需要使用“>”作为'>',将“<”用于'<'。
RangeMin 编号
注意:如果 RuleType 为 3,则此参数是必需的。
RangeMax 编号
注意:如果 RuleType 为 3,则此参数是必需的。
价值 Text
注意:如果 RuleType 为 0、1 或 4,则此参数是必需的。 参数必须是数字或字母数字值。
返回类型 AttributeRuleID 文本

applicationadd

创建新应用程序,返回新应用程序的 ID。

论据 类型
描述
计算机
module
parameter
协议
用户名
密码
svroleID (可选) 如果此参数不存在,则使用当前用户的监督角色。
Applicationaliasformula (可选) 将别名公式分配给应用程序的权限时,该别名公式用于为用户创建别名。 如果用户还没有此应用程序的别名,则会创建该别名。 如果未提供任何值,则用户的默认别名将用作应用程序的别名。 公式的格式为 [<<objecttype>>.<<nameofobjecttypeattribute>>(startindexoffset,length offset)]。 偏移量是可选的。 只能使用用户和应用程序属性。 可以使用自由文本。 保留字符是左方括号 ([) 和右方括号 (])。 例如: [Application.bholdDescription]\[User.bholdDefAlias(1,5)]
返回类型 新应用程序的 ID。

AttributeSetValue

设置连接到对象类型的属性类型的值。 要求对象类型和属性类型的说明是唯一的。

论据 类型
ObjectTypeID 文本
ObjectID 文本
AttributeTypeID 文本
价值 文本
返回类型 类型

AttributeTypeAdd

插入新的属性类型/属性类型。

论据 类型
DataTypeID 文本
说明 (=Identity) Text
注意:不能使用保留字,包括“a”、“frm”、“id”、“usr”和“bhold”。
MaxLength [1,..,255] 中的数字
ListOfValues (布尔值) ["0"|"1"|"N"|"Y"]
DefaultValue 文本
返回类型 类型
AttributeTypeID 文本

AttributeTypeSetAdd

插入新的属性类型集。 要求属性类型集的说明是唯一的。

论据 类型
说明 (=Identity) 文本
返回类型 类型
AttributeTypeSetID 文本

AttributeTypeSetAddAttributeType

在现有属性类型集中插入新的属性类型。 要求属性类型集的说明和属性类型是唯一的。

论据 类型
AttributeTypeSetID 文本
AttributeTypeID 文本
下单 数字
LocationID Text
注意:位置为“group”或“single”。
强制的 ["0"|"1"|"N"|"Y"]
返回类型 类型

ObjectTypeAddAttributeTypeSet

将属性类型集添加到对象类型。 要求对象类型和属性类型集的说明是唯一的。 对象类型为:System、OrgUnit、User、Task。

论据 类型
ObjectTypeID 文本
AttributeTypeSetID 文本
下单 数字
可见
  • 0:属性类型集可见。
  • 2:选择 按钮 详细信息时,属性类型集可见。
  • 1:属性类型集不可见。
返回类型 类型

OrgUnitadd

创建新的组织单位,返回新组织单位的 ID。

论据 类型
描述
orgtypeID
parentID
OrgUnitinheritedroles (可选)
返回类型 类型
新单元的 ID 参数 OrgUnitinheritedroles
具有值为“是”或“否”。

OrgUnitaddsupervisor

使用户成为组织单位的主管。

论据 类型
svroleID 还可以使用参数 userID。 在这种情况下,将选择默认的监督角色。 默认监督角色的名称类似于 __svrole 后跟数字。 参数 userID 可用于向后兼容性。
OrgUnitID

OrgUnitadduser

使用户成为组织单位的成员。

论据 类型
userID
OrgUnitID

OrgUnitdelete

删除组织单位。

论据 类型
OrgUnitID

OrgUnitdeleteuser

将用户作为组织单位的成员删除。

论据 类型
userID
OrgUnitID

roleadd

创建新角色。

论据 类型
说明
svrole
svroleID (可选) 如果此参数不存在,则使用当前用户的监督角色。
ContextAdaptable (可选) ["0","1","N","Y"]
MaxPermissions (可选) 整数
MaxRoles (可选) 整数
MaxUsers (可选) 整数
返回类型 类型
新角色的 ID

roleaddOrgUnit

将角色分配给组织单位。

论据 类型
OrgUnitID roleID
inheritThisRole “true”或“false”,指示该角色是否建议为基础单位。

roleaddrole

将角色分配为另一个角色的子角色。

论据 类型
roleID
subRoleID

roleaddsupervisor

使用户成为角色的主管。

论据 类型
svroleID 还可以使用参数 userID。 在这种情况下,将选择默认的监督角色。 默认监督角色的名称类似于 __svrole 后跟数字。 参数 userID 可用于向后兼容性。
roleID

roleadduser

向用户分配角色。 如果未提供 contextID,则该角色不能是上下文自适应角色。

论据 类型
userID
roleID
durationType (可选) 可以包含值“free”、“hours”和“days”。
durationLength (可选) 当 durationType 为“hours”或“days”时必需。 应包含分配给用户的小时数或天数的整数值。
start (可选) 分配角色的日期和时间。 如果省略此属性,则会立即分配角色。 日期格式为“YYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
end (可选) 撤销角色的日期和时间。 给定 durationType 和 durationLength 时,将忽略此值。 日期格式为“YYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
linkreason 在给定开始、结束或持续时间时是必需的,否则将被忽略。
contextId (可选) 组织单位的 ID,仅适用于上下文可调整角色。

roledelete

删除角色。

论据 类型
roleID

roledeleteuser

删除用户的角色分配。 用户继承的角色由此命令吊销。

论据 类型
userID
roleID
contextID (可选)

roleproposeOrgUnit

建议一个角色,以将其分配给 OrgUnit 的成员和子组织单位。

论据 类型
OrgUnitID
roleID
durationType (可选) 可以包含值“free”、“hours”和“days”。
durationLength 当 durationType 为“hours”或“days”时,应包含角色分配给用户的小时数或天数的整数值。
durationFixed “true”或“false”,指示将此角色分配给用户是否应等于 durationLength。
inheritThisRole “true”或“false”,指示该角色是否建议为基础单位。

taskadd

创建新任务,返回新任务的 ID。

论据 类型
applicationID
描述 最多包含 254 个字符的文本。
taskname 最多包含 254 个字符的文本。
tokenGroupID
svroleID (可选) 如果此参数不存在,则使用当前用户的监督角色。
contextAdaptable (可选) ["0","1","N","Y"]
underconstruction (可选) ["0","1","N","Y"]
auditaction (可选)
  • 0:未知(默认值)
  • 1:ReportOnly
  • 2:AlertAppAll
  • 3:AlertAppObsolete
  • 4:AlertAppMissing
  • 5:EnforceAppAll
  • 6:EnforceAppObsolete
  • 7:EnforceAppMissing
  • 8:AlertEnforceAppAll
  • 9:AlertEnforceAppObsolete
  • 10:AlertEnforceAppMissing
  • 11:ImportAll
auditalertmail (可选) 审核员会发送有关此权限的电子邮件地址。 如果此参数不存在,则使用审核员的警报电子邮件地址。
MaxRoles (可选) 整数
MaxUsers (可选) 整数
返回类型 新任务的 ID。

taskadditask

指示两个任务不兼容。

论据 类型
taskID
taskID2

taskaddrole

将任务分配给角色。

论据 类型
roleID
taskID

taskaddsupervisor

使用户成为任务的主管。

论据 类型
svroleID 还可以使用参数 userID。 在这种情况下,将选择默认的监督角色。 默认监督角色的名称类似于 __svrole 后跟数字。 参数 userID 可用于向后兼容性。
taskID

useradd

创建新用户,返回新用户的 ID。

论据 类型
描述
别名
languageID
  • 1:英语
  • 2:荷兰语
OrgUnitID
enddate (可选) 日期格式为“YYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
disabled (可选)
  • 0:已启用
  • 1:已禁用
MaxPermissions (可选) 整数
MaxRoles (可选) 整数
返回类型 新用户的 ID。

UserAddRole

添加用户角色。

论据 类型

UserDeleteRole

删除用户角色。

论据 类型

Userupdate

更新用户。

论据 类型
UserID
说明(可选)
语言
  • 1:英语
  • 2:荷兰语
userDisabled (可选)
  • 0:已启用
  • 1:已禁用
UserEndDate (可选) 日期格式为“YYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
firstName (可选)
middleName (可选)
lastName (可选)
maxPermissions (可选) 整数
maxRoles (可选) 整数

GetInfo 函数

本节中所述的函数集可用于检索存储在 BHOLD 系统中的信息。 可以使用 BScript 对象的 GetInfo 函数调用每个函数。 某些对象需要参数。 返回的数据受用户登录的视图权限和监督对象的约束。

GetInfo 参数

名字 说明
应用程序 返回应用程序列表。
attributetypes 返回属性类型的列表。
orgtypes 返回组织单位类型的列表。
OrgUnits 返回没有组织单位属性的组织单位的列表。
OrgUnitproposedroles 返回链接到组织单位的建议角色的列表。
OrgUnitroles 返回给定组织单位的直接链接角色的列表
Objecttypeattributetypes
权限
permissionusers
角色 返回角色列表。
roletasks 返回给定角色的任务列表。
任务 返回 BHOLD 已知的所有任务。
users 返回用户列表。
usersroles 返回给定用户的链接主管角色的列表。
userpermissions 返回给定用户的权限列表。

OrgUnit 信息

名字 参数 返回类型
OrgUnit OrgUnitID OrgUnit
OrgUnitasiattributes OrgUnitID 收集
OrgUnits filter (可选),proptypeid (可选)
在 prop typeid中所述的 proptype 中搜索包含 筛选器 中所述字符串的单位。 如果省略此 ID,筛选器将应用于单元说明。 如果未提供任何筛选器,则返回所有可见单位。
收集
OrgUnitOrgUnits OrgUnitID 收集
OrgUnitparents OrgUnitID 收集
OrgUnitpropertyvalues OrgUnitID 收集
OrgUnitproptypes 收集
OrgUnitusers OrgUnitID 收集
OrgUnitproposedroles OrgUnitID 收集
OrgUnitroles OrgUnitID 收集
OrgUnitinheritedroles OrgUnitID 收集
OrgUnitsupervisors OrgUnitID 收集
OrgUnitinheritedsupervisors OrgUnitID 收集
OrgUnitsupervisorroles OrgUnitID 收集

角色信息

名字 参数 返回类型
角色 roleID 对象
角色 filter (可选) 收集
roleasiattributes roleID 收集
roleOrgUnits roleID 收集
roleparentroles roleID 收集
rolesubroles roleID 收集
rolesupervisors roleID 收集
rolesupervisorroles roleID 收集
roletasks roleID 收集
roleusers roleID 收集
rolesupervisorroles roleID 收集
proposedroleOrgUnits roleID 收集
proposedroleusers roleID 收集

权限 - 任务信息

名字 参数 返回类型
许可 TaskID 许可
权限 filter (可选) 收集
permissionasiattributes TaskID 收集
permissionattachments TaskID 收集
permissionattributetypes - 收集
permissionparams TaskID 收集
permissionroles TaskID 收集
permissionsupervisors TaskID 收集
permissionsupervisorroles TaskID 收集
permissionusers TaskID 收集
任务 TaskID 任务
任务 filter (可选) 收集
taskattachments TaskID 收集
taskparams TaskID 收集
taskroles TaskID 收集
tasksupervisors TaskID 收集
tasksupervisorroles TaskID 收集
taskusers TaskID 收集

用户信息

名字 参数 返回类型
用户 UserID 用户
users filter (可选),attributetypeid (可选)
搜索包含在由 attributetypeid 指定的字符串的属性类型中指定的用户。 如果省略此 ID,筛选器将应用于用户默认别名。 如果未提供筛选器,则返回所有可见用户。 例如:
  • GetInfo("users") 返回所有用户。
  • GetInfo("users", "%dmin%") 返回默认别名中字符串为“dmin”的所有用户。
  • 假设用户有一个名为 "City".GetInfo("users", "%msterda%", "City")的额外属性。 此调用返回在 City 属性中具有字符串“msterda”的所有用户。
UserCollection
usersapplications UserID 收集
Userpermissions UserID 收集
userroles UserID 收集
usersroles UserID 收集
userstasks UserID 收集
usersunits UserID 收集
usertasks UserID 收集
userunits UserID 收集

返回类型

在本部分中,将介绍 GetInfo 函数的返回类型。

名字 返回类型
收集 =<ITEMS>{<ITEM description="..." id="..." />}</ITEMS>
对象 =<ITEM type="…" description="..." />
OrgUnit = <ITEM id="…" description="..." orgtype="..." parent="..."> <LIST> {<ITEM> <KEY>… </KEY> <VALUE> … </VALUE> </ITEM>} </LIST> </ITEM>
许可 = <ITEM id="…" description="…" name="…" tokengroup="…" application="…" > <LIST> {<ITEM> <KEY>… </KEY> <VALUE> … </VALUE> </ITEM>} </LIST> </ITEM>
角色 = <ITEMS> {<ITEM id="…" description="…" />} </ITEMS>
角色 = <ITEM id="…" description="… " > <LIST> {<ITEM> <KEY>… </KEY> <VALUE> … </VALUE> </ITEM>} </LIST> </ITEM>
任务 查看权限
用户 = <ITEMS> {<ITEM description="…" id="…" alias="…" />} </ITEMS>
用户 = <ITEM id="…" description="…" alias="…" firstname="…" lastname="…" uuid="…" language="…"> <LIST> {<ITEM> <KEY>… </KEY> <VALUE> … </VALUE> </ITEM>} </LIST> </ITEM>

脚本示例

公司具有 BHOLD 服务器,并希望创建一个新客户的自动化脚本。 有关公司及其购买经理的信息在自定义网页中输入。 每个客户都以单位客户下的单位的形式显示在模型中。 购买经理也是本单位的主管。 创建一个角色,使所有者有权以新客户的名义购买。

但是,此客户在应用程序中不存在。 ASI FunctionDispatch 中实现了一个特殊函数,用于在购买应用程序中创建新的客户帐户。 每个客户都有一个客户类型。

FunctionDispatch 函数也可以提供可能的类型。 AA 为新客户选择正确的类型。

创建角色和任务来提供购买权限。 实际购买权限由 ASI 呈现为文件 /customers/customer id/purchase。 此文件应链接到新任务。

收集信息的活动服务器页如下所示:

<%@ Language=VBScript %>
<% Option Explicit %>
<html>
<body>
<form action="MySubmit.asp" method=post>
<input type="hidden" name="OrgUnitID" 
     value="<% = Request("ID") %>">
Company <input type="text" name="Description"> <br>
Type <select name="OrgType">
<%Dim oOrgType
For Each oOrgType on bscript.getinfo("Orgtypes") %>
<option value="<% = oOrgType.OrgTypeID %>">
<% = oOrgType.Description %>
</option> <%
Next %>
</select>  <br>
Manager <input type="text" name=" manager"> <br>
Alias <input type=" text" name=" alias"> <br>
e-mail <input type=" text" name=" email"> <br>
<input type="submit">
</form>
</body>
</html>

所有自定义页面必须执行的是请求正确的信息,并创建包含所请求信息的 XML 文档。 在此示例中,MySubmit 页面转换 XML 文档中的数据,并将其分配给 b1script。参数 对象,最后调用 b1script.ExecuteScript("MyScript") 函数。

以下输入脚本显示了此示例:

<customer>
<description>ACME inc.</description>
<orgtype>5<orgtype>
<name>John Doe</name>
<alias>jdoe</alias>
<email>jdoe@acme.com</email>
</customer>

此输入脚本不包含 BHOLD 的任何命令。 这是因为此脚本不是由 BHOLD 直接执行的;而不是它,这是预定义函数的输入。 此预定义函数使用 BHOLD 命令将此对象转换为 XML 文档。 此机制将用户从将脚本发送到 BHOLD 系统,该系统包含不允许用户执行的函数,例如 setUser 和函数调度到 ASI。

<?xml version="1.0" encoding="utf-8" ?> 
- <functions xmlns="http://tempuri.org/BscriptFunctions.xsd">

  <function name="roleadduser" roleid="" userid="" /> 
  <function name="roledeleteuser" roleid="" userid="" /> 
  </functions>

后续步骤