Bug in 'List constituent custom fields' action?

Options
I had a flow start failing on me sometime between the Jan 24th and 27th. When I looked at the run history, I was getting an error on the 'List constituent custom fields' action. It told me the problem was that it was expecting the system record ID to be a string, but it got an integer instead.


I've done some tests and believe this might be a bug, especially since it seems to have started happening right around the time that the newest updates to the connector were released.


No matter how I pass the ID, it tells me that it received an integer. I have even wrapped it in the string() expression, but no dice. Here are a few screenshots of a test.


For this test, I just typed in the id of one of my constituents.



Here is the error message:


It's a little blurry, but it says:

ResponseSwaggerSchemaValidationFailure. The API 'blackbaudraisersedge' returned an invalid response for workflow operation 'List_constituent_custom_fields' of type 'OpenApiConnection'. Error details: 'The API operation 'ListConstituentCustomFields' requires the property 'body/value/2/value' to be of type 'String' but is of type 'Integer'.'



However, when I look at my raw inputs, it looks like a string:



Are others experiencing this behavior?

Comments

  • Hi Ben,


    Thanks for raising this - we're investigating now and will report back when we know more.
  • Ben Lambert‍, I'm having the same issue with the Fund Custom Fields (Single Gift) action. I can create an HTTP request with a valid bearer token, and it will succeed. If I use your connector, or a custom connector I created from your Open API spec, it fails with the same error seen on this post, EXCEPT that it tells me that mine is of type 'Boolean'.

  • I tried the same tests as Ben Regier‍. I changed from using a dynamic value to a hard-coded value, wrapped it in a string() expression, etc.
  • Hi Ben (and Steven),


    Just an update - we've been able to reproduce the problem, and are actively working to find the right solution.


    The crux of the problem is that Power Automate has introduced some strict(er) validation of API responses against the connector definition, which has brought to light a problem in how we've defined the shape of the response for the various actions that list custom fields. In the connector, we've (incorrectly) defined the "value" field as a "string" (for the xxxCustomFieldRead schema), but depending on the custom field category, the actual value coming back from the API might be a number, a date, a boolean, a fuzzy date (i.e., a complex JSON object), etc. Power Automate (now) considers this mismatch to be a runtime problem (whereas before it did not).


    So right now, these "List <record type> custom fields" actions will work fine as long as the custom fields returned by the API can be represents as native JSON string values (i.e., constituent, date, string, etc.). If non-string custom fields are encountered (number, boolean, fuzzy date, etc.), Power Automate fails the flow at runtime with the message you're seeing above..


    I know this is a giant hassle, so apologies for the trouble. I don't have an immediate ETA on getting this resolved, but we are working on it and wanted to be transparent about the status. Please free free to reach out to me directly at ben (dot) lambert (at) blackbaud.com if you have any questions, and rest assured we will post an update here as soon as we know more.


    Thanks, and sorry again for the hassle here!.
  • Thanks for the update, Ben.
  • Ben Regier‍, I was able to get a custom connector working with the fund custom fields action, and I believe the same would be true for the constituent custom fields as well. I'll be adding those soon.


    You would have to register a new application in RENXT, then create a custom connector with Oauth 2 security. Here is the swagger file for the connector if you're interested. Feel free to reach out if you need more detail.


    swagger: '2.0'

    info: {title: RENXT HTTP Connector, description: Fund Custom Field List is currently

    the only action., version: '1.0'}

    host: api.sky.blackbaud.com

    basePath: /

    schemes: [https]

    consumes: []

    produces: []

    paths:

    /fundraising/v1/funds/{fund_id}/customfields:

    get:

    responses:

    default:

    description: default

    schema: {}

    summary: GetFundCustomFields

    operationId: GetFundCustomFields

    parameters:

    - {name: fund_id, in: path, required: true, type: string, description: RENext

    System ID... or Azure LOB fundID_Int. NOT Lookup_Id, x-ms-visibility: important}

    - {name: Bb-Api-Subscription-Key, in: header, required: true, type: string,

    x-ms-visibility: important}

    - {name: Content-Type, in: header, required: true, type: string, x-ms-visibility: important}

    definitions: {}

    parameters: {}

    responses: {}

    securityDefinitions:

    oauth2_auth:

    type: oauth2

    flow: accessCode

    authorizationUrl: https://oauth2.sky.blackbaud.com/authorization

    tokenUrl: https://oauth2.sky.blackbaud.com/token

    scopes: {}

    security:

    - oauth2_auth: []

    tags: []
  • Ben Lambert‍ Thanks for the update.
  • Thanks, Steve.


    Yes, I've actually been using an old custom connector that I put together before BlackBaud released their official connector, and it's working just fine. Good idea to post the swagger, though, for others who might be in the same boat!


    -Ben
  • Hi Ben and Steven,


    The reason the custom connector works is that it doesn't provide any description for the API response (specifically, it has no definition for the value property of the xxxCustomFieldRead entity, so it doesn't have the bug that exists in the official connector, which incorrectly defines the value property as type: string).


    Microsoft has recommended that we remove the type: string metadata from the response definition, which essentially means the value property does not have a static type definition (an accurate statement). We are working on getting that change into the connector, after which we'll submit the updated connector to Microsoft for deployment. That process can take a few days/weeks to reach all production regions, so we are currently waiting to hear back from Microsoft on whether any more expedient options exist.


    Apologies again for this issue, and I will keep you informed as we make progress getting the solution deployed.
  • Just wanted to update this thread...Microsoft is in-progress deploying our updated connector with the fix that will remove the (incorrect) static type definition for the "value" property of xxxCustomFieldRead entities (and btw, this problem also affected reading constituent ratings). These deployments take a few days to complete once started, and Microsoft uses a controlled release pattern for getting the updated connector deployed to all production regions.


    I'll update again once the updated connector is fully deployed. In addition to the fix for this issue, the update will also include a few other minor feature enhancements like returning gift_code and linked_gifts fields when reading gifts. We'll announce those features on the changelog (ETA is a few days).


    Let me know if you have any questions, and thanks again for raising this issue with us!
  • Well I completely dropped the ball and forgot to update this thread!


    Just wanted to let you know that the fix for this was released to all production regions back on 3/5/2021.


    Please let us know if you continue to have any problems!


  • Thanks Ben! I saw the announcement but also forgot to update this thread.
  • Thanks, Ben,

    I’m shifting to new opportunities with a
    different company but I’ll pass the word along to the team.

    Steven Arn

    Application Developer

    www.Ethnos360.org

  • Just a note - for whatever reason, this doesn't seem to fix existing flows. I tried removing and adding the List Constituent Custom Fields action, but it was still failing with the same error. It was a simple flow so rebuilding it from scratch was easy to do and fixed the problem.

Categories