我花了一些时间在董事会上查看其他问题,但没有找到类似的东西,所以在这里:
我有一份报告,针对Fetch Query中的最大字符数,符合CRM 2011在线限制。我想有一个下拉框,可以选择“所有联系人”或“选择最多五个联系人”来避免这个问题。
如果选择“所有联系人”选项,我想要从Fetch语句中删除条件,并且仅在选择最多五个选项时包括条件。
我将如何做到这一点?
如果您有任何其他问题,请与我们联系。
尼克
答案 0 :(得分:0)
您可以使用自定义代码构建SQL,因为SQL本身可以是您手动构建的字符串表达式。假设您的SQL目前看起来像这样:
SELECT ThisField, ThatField
FROM Contacts
WHERE ContactId IN @Contacts
让我们将其更改为构建SQL的字符串表达式:
="SELECT ThisField, ThatField "
& "FROM Contacts "
& "WHERE ContactId IN @Contacts "
现在,我们需要将@Contacts
参数拉开,只有在选择了五个或更少的联系人时才选择ContactId
:
Function ContactsSQL(ByVal parameter As Parameter) AS String
Dim Result As String
Result = ""
If parameter.IsMultiValue Then
If parameter.Count <= 5 Then
Result = "WHERE ContactId IN ("
For i As integer = 0 To parameter.Count-1
Result = Result + CStr(parameter.Value(i)) + ", "
Next
Result = Left(Result, Result.Length - 2) + ") "
End If
End If
Return Result
End Function
此函数构建SQL WHERE
子句,仅在选择了五个或更少时才选择联系人,否则返回一个空字符串。现在我们在SQL表达式中使用这个函数:
="SELECT ThisField, ThatField "
& "FROM Contacts "
& Code.ContactsSQL(Parameters!Contacts)
请注意,您在此处传递Contacts
参数对象,而不是Value
属性。我们在自定义代码函数中访问Value属性。