79552233

Date: 2025-04-03 07:14:33
Score: 1
Natty:
Report link

You can invoke the custom action using pure XMLHttpRequest:

function executeRequest(
  httpAction: HttpAction,
  uri: string,
  data?: any): Promise<XMLHttpRequest> {
  // Construct a fully qualified URI if a relative URI is passed in.
  if (uri.startsWith("/")) {
    uri = `${getWebApiUrl()}${uri}`;
  }
  const preferHeaders = [
    "OData.Community.Display.V1.FormattedValue",
    "Microsoft.Dynamics.CRM.associatednavigationproperty",
    "Microsoft.Dynamics.CRM.lookuplogicalname",
  ].join(",");
  return new Promise(function (resolve, reject) {
    const request = new XMLHttpRequest();
    request.open(httpAction, encodeURI(uri), true);
    request.setRequestHeader("OData-MaxVersion", "4.0");
    request.setRequestHeader("OData-Version", "4.0");
    request.setRequestHeader("Accept", "application/json");
    request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    request.setRequestHeader("Prefer", `odata.include-annotations='${preferHeaders}'`);
    request.onreadystatechange = function () {
      if (this.readyState === 4) {
        request.onreadystatechange = null;
        let error: any;
        switch (this.status) {
          case 200: // Success with content returned in response body.
          case 204: // Success with no content returned in response body.
            resolve(this);
            break;
          default: // All other statuses are unexpected so are treated like errors.
            try {
              const resp = JSON.parse(request.response as string) as { error: any };
              error = resp.error;
            } catch (e) {
              error = new Error("Unexpected Error");
            }
            reject(error);
            break;
        }
      }
    };
    if (data) {
      request.send(JSON.stringify(data));
    } else {
      request.send();
    }
  });
}

Usage:

const actionName = "/new_MyActionName";
const data = {};  // Your action input parameter data
  // If you have 2 input params: Name (string), Age (number);
  // You will define the data as following:
  // const data = { Name: "John", Age: 18 };
 
executeRequest("POST", actionName, data).then((resp) => {
  const respObj = resp.responseText 
    ? (JSON.parse(resp.responseText))
    : ({});
  console.log(respObj);
}).catch(e => console.error(e));

Details: https://kalcancode.wordpress.com/2025/04/01/generic-js-function-to-execute-custom-action-in-power-apps/

Reasons:
  • Probably link only (1):
  • Contains signature (1):
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (0.5):
Posted by: kal