Azure AD B2C自定义策略:整数前置条件比较与int转string方法
解决方案
1. 直接在前置条件中比较整数(无需转字符串)
B2C自定义策略的前置条件支持ClaimGreaterThan类型,可直接用于整数类型声明的比较,完全不需要先转字符串。
调整你的策略:
- 将
extension_Id和Id的DataType改为int(和B2C自定义属性的类型保持一致) - 使用
ClaimGreaterThan前置条件判断ID是否大于0,直接跳过API调用步骤
示例代码:
<ClaimType Id="Id"> <DisplayName>Id</DisplayName> <DataType>int</DataType> <AdminHelpText>extension_Id</AdminHelpText> <UserHelpText>extension_Id</UserHelpText> </ClaimType> <ClaimType Id="extension_Id"> <DisplayName>extension_Id</DisplayName> <DataType>int</DataType> <AdminHelpText>extension_Id</AdminHelpText> <UserHelpText>extension_Id</UserHelpText> <DefaultValue>0</DefaultValue> <!-- 明确设置int类型的默认值,避免上传报错 --> </ClaimType> <!-- 调整后的编排步骤前置条件 --> <OrchestrationStep Order="5" Type="InvokeSubJourney"> <Preconditions> <!-- 如果Id > 0,跳过此步骤 --> <Precondition Type="ClaimGreaterThan" ExecuteActionsIf="true"> <Value>Id</Value> <Value>0</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <JourneyList> <Candidate SubJourneyReferenceId="read-from-api"/> </JourneyList> </OrchestrationStep>
2. 若需将int转为字符串(备用方案)
如果确实需要把int类型声明转为字符串,可使用StringFormatClaimsTransformation替代ConvertNumberToStringClaim,它支持int类型输入:
<ClaimType Id="Id_string"> <DisplayName>Id (string)</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimsTransformation Id="ConvertIntToString" TransformationMethod="StringFormatClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="Id" TransformationClaimType="inputClaim"/> </InputClaims> <InputParameters> <InputParameter Id="stringFormat" Value="{0}"/> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="Id_string" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation>
在用户旅程的合适步骤中调用这个转换后,即可用ClaimEquals比较字符串值。
3. 解决策略上传时的类型匹配报错
确保策略中声明的DataType和B2C自定义属性的类型完全一致(自定义属性选int,策略里就用int),同时给声明明确设置同类型的默认值(比如int的默认值设为0),这样上传策略时就不会出现类型不匹配的语法错误,无需再用回退上传的方式。
内容的提问来源于stack exchange,提问作者code_disciple
相关产品推荐
相关产品推荐

