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 信息
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 | 字符 |
---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
这些 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 | 指定属性规则的类型。 根据属性规则类型的类型,必须包含其他参数。 以下规则类型值有效:
|
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 |
可见 |
|
返回类型 | 类型 |
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 (可选) |
|
auditalertmail (可选) | 有关此权限的警报的电子邮件地址由审核员发送。 如果此参数不存在,则使用审核员的警报电子邮件地址。 |
MaxRoles (可选) | Integer |
MaxUsers (可选) | Integer |
返回类型 | 新任务的 ID。 |
taskadditask
指示两个任务不兼容。
参数 | 类型 |
---|---|
taskID | |
taskID2 |
taskaddrole
将任务分配给角色。
参数 | 类型 |
---|---|
roleID | |
taskID |
taskaddsupervisor
使用户成为任务的主管。
参数 | 类型 |
---|---|
svroleID | 也可以使用参数 userID。 在这种情况下,会选择默认的监督者角色。 默认主管角色的名称类似于 __svrole 后跟数字。 参数 userID 可用于向后兼容。 |
taskID |
useradd
创建新用户,返回新用户的 ID。
参数 | 类型 |
---|---|
description | |
alias | |
languageID |
|
OrgUnitID | |
enddate (可选) | 日期格式为“YYYYY-MM-DDThh:nn:ss”,其中只需要年、月和日。 例如,“2004-12-11”和“2004-11-28T08:00”是有效值。 |
禁用 (可选) |
|
MaxPermissions (可选) | Integer |
MaxRoles (可选) | Integer |
返回类型 | 新用户的 ID。 |
UserAddRole
添加用户角色。
参数 | 类型 |
---|---|
UserDeleteRole
删除用户角色。
参数 | 类型 |
---|---|
Userupdate
更新用户。
参数 | 类型 |
---|---|
UserID | |
说明 (可选) | |
语言 |
|
userDisabled (可选) |
|
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,筛选器将应用于用户默认别名。 如果未提供筛选器,则返回所有可见用户。 例如:
|
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>