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访问 BScript 对象。 这是通过使用 http://< server>:5151/BHOLD/Core/b1scriptservice.asmx 向项目添加 Web 引用来完成的,其中 <server> 是安装了 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 文档。 第二个参数是要使用的预定义脚本的名称。 在 BHOLD 预定义脚本目录中,此处应是与函数同名但扩展名为 .xsl 的 XSL 文档。

如果该函数不成功,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}
function <function name=“functionName” functionParameters [return] (/> | parameterList </ function>>)
functionName 一个有效的函数名称,如以下部分所述。
functionParameters { functionParameter }
functionParameter parameterName = “parameterValue”
parameterName 有效的参数名称。
parameterValue @variable@ |价值
value 有效的参数值。
parameterList <parameters> {parameterItem} </parameters>
parameterItem <parameter name=“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:年龄 (添加参数“operator”和“value”) 。
InvertResult ["0"|"1"|"N"|"Y"]
AttributeTypeID 文本
可选自变量 类型
运算符 文本
注意:如果 RuleType 为 1 或 4,则此参数是必需的。 可能的值为“=”、“”<或“>”。 XML 标记需要将“”>用于“”>,将“”<用于“”。<
RangeMin Number
注意:如果 RuleType 为 3,则此参数是必需的。
RangeMax Number
注意:如果 RuleType 为 3,则此参数是必需的。
文本
注意:如果 RuleType 为 0、1 或 4,则此参数是必需的。 参数必须是数值或字母数字值。
返回类型 AttributeRuleID 文本

applicationadd

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

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

AttributeSetValue

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

参数 类型
ObjectTypeID 文本
ObjectID 文本
AttributeTypeID 文本
文本
返回类型 类型

AttributeTypeAdd

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

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

AttributeTypeSetAdd

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

参数 类型
Description (=Identity) 文本
返回类型 类型
AttributeTypeSetID 文本

AttributeTypeSetAddAttributeType

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

参数 类型
AttributeTypeSetID 文本
AttributeTypeID 文本
订单 Number
LocationID 文本
注意:位置为“组”或“单一”。
必需 ["0"|"1"|"N"|"Y"]
返回类型 类型

ObjectTypeAddAttributeTypeSet

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

参数 类型
ObjectTypeID 文本
AttributeTypeSetID 文本
订单 Number
可见
  • 0:属性类型集可见。
  • 2:选择 “更多信息 ”按钮时,属性类型集可见。
  • 1:属性类型集不可见。
返回类型 类型

OrgUnitadd

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

参数 类型
description
orgtypeID
parentID
OrgUnitinheritedroles (可选)
返回类型 类型
新单位的 ID 参数 OrgUnitinheritedroles
具有值 yes 或 no。

OrgUnitaddsupervisor

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

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

OrgUnitadduser

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

参数 类型
userID
OrgUnitID

OrgUnitdelete

删除组织单位。

参数 类型
OrgUnitID

OrgUnitdeleteuser

删除组织单位成员身份的用户。

参数 类型
userID
OrgUnitID

roleadd

创建新角色。

参数 类型
说明
svrole
svroleID (可选) 如果此参数不存在,则使用当前用户的主管角色。
ContextAdaptable (可选) ["0","1","N","Y"]
MaxPermissions (可选) Integer
MaxRoles (可选) Integer
MaxUsers (可选) Integer
返回类型 类型
新角色的 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 (可选) 分配角色的日期和时间。 省略此属性时,将立即分配角色。 日期格式为“YYYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
end (可选) 吊销角色的日期和时间。 如果指定 durationType 和 durationLength,则忽略此值。 日期格式为“YYYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
linkreason 在给定开始、结束或持续时间时是必需的,否则将忽略。
contextId (可选) 组织单位的 ID,仅适用于可适应上下文的角色。

roledelete

删除角色。

参数 类型
roleID

roledeleteuser

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

参数 类型
userID
roleID
contextID (可选)

roleproposeOrgUnit

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

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

taskadd

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

参数 类型
applicationID
description 最多包含 254 个字符的文本。
taskname 最多包含 254 个字符的文本。
tokenGroupID
svroleID (可选) 如果此参数不存在,则使用当前用户的主管角色。
contextAdaptable (可选) ["0","1","N","Y"]
underconstruction (optional) ["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 (可选) Integer
MaxUsers (可选) Integer
返回类型 新任务的 ID。

taskadditask

指示两个任务不兼容。

参数 类型
taskID
taskID2

taskaddrole

将任务分配给角色。

参数 类型
roleID
taskID

taskaddsupervisor

使用户成为任务的主管。

参数 类型
svroleID 也可以使用参数 userID。 在这种情况下,会选择默认的监督者角色。 默认主管角色的名称类似于 __svrole 后跟数字。 参数 userID 可用于向后兼容。
taskID

useradd

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

参数 类型
description
alias
languageID
  • 1:英语
  • 2:荷兰语
OrgUnitID
enddate (可选) 日期格式为“YYYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。
禁用 (可选)
  • 0:已启用
  • 1:已禁用
MaxPermissions (可选) Integer
MaxRoles (可选) Integer
返回类型 新用户的 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 (可选) Integer
maxRoles (可选) Integer

GetInfo 函数

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

GetInfo 参数

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

OrgUnit 信息

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

角色信息

名称 parameters 返回类型
角色 (role) roleID Object
角色 筛选器 (可选) 集合
roleasiattributes roleID 集合
roleOrgUnits roleID 集合
roleparentroles roleID 集合
rolesubroles roleID 集合
rolesupervisors roleID 集合
rolesupervisorroles roleID 集合
roletasks roleID 集合
roleusers roleID 集合
rolesupervisorroles roleID 集合
proposedroleOrgUnits roleID 集合
proposedroleusers roleID 集合

权限 - 任务信息

名称 parameters 返回类型
权限 (permission) TaskID 权限
权限 筛选器 (可选) 集合
permissionasiattributes TaskID 集合
permissionattachments TaskID 集合
permissionattributetypes - 集合
permissionparams TaskID 集合
permissionroles TaskID 集合
permissionsupervisors TaskID 集合
permissionsupervisorroles TaskID 集合
permissionusers TaskID 集合
task TaskID 任务
任务 筛选器 (可选) 集合
taskattachments TaskID 集合
taskparams TaskID 集合
taskroles TaskID 集合
tasksupervisors TaskID 集合
tasksupervisorroles TaskID 集合
taskusers TaskID 集合

用户信息

名称 parameters 返回类型
user UserID 用户
users filter (可选) 、attributetypeid (可选)
搜索包含在由 attributetype 指定的 attributetypeid 由 filter 指定的字符串的用户。 如果省略此 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>
Object =<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。Parameters 对象,最后调用 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>

后续步骤