diff --git a/.auto-changelog b/.auto-changelog index b64f475c..6cae4d38 100644 --- a/.auto-changelog +++ b/.auto-changelog @@ -2,7 +2,7 @@ "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": true, - "commitLimit": 0, + "commitLimit": 40, "hideCredit": true, - "tagPrefix": "" + "tagPrefix": "v" } diff --git a/.eslintignore b/.eslintignore index 5f7b681a..6c95c99e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -13,4 +13,6 @@ **/aura/**/*.tokens **/aura/**/*.xml **/aura/**/*.app +**/ActionPlan_Resources/js .sfdx +.sf diff --git a/.forceignore b/.forceignore index 8b5ee128..185bb0dc 100755 --- a/.forceignore +++ b/.forceignore @@ -47,6 +47,7 @@ TaskPriority.standardValueSet TaskType.standardValueSet Lead-Lead Layout.layout Account-Account Layout.layout +Opportunity-Opportunity Layout.layout-meta.xml Global-Global Layout.layout Account.object Campaign.object diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05bf56a2..1d1a2e8c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,22 +41,10 @@ jobs: if: steps.cache-npm.outputs.cache-hit != 'true' run: npm ci - # Start local Apex parser server for Prettier - - name: 'Start local Apex parser server for Prettier' - run: npm run apex:local:start & - - # Wait for Apex parser server startup - - name: 'Wait for Apex parser server startup' - run: timeout 30 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' 127.0.0.1 2117 - # Prettier formatting - name: 'Code formatting verification with Prettier' - run: npm run prettier:verify:apex:local + run: npm run prettier:verify - # Stop local Apex parser server for Prettier - - name: 'Stop local Apex parser server for Prettier' - if: always() - run: npm run apex:local:stop pmd-analysis: runs-on: ubuntu-latest needs: format-lint @@ -66,16 +54,10 @@ jobs: - name: 'Checkout source code' uses: actions/checkout@v3 - - name: 'Use latest PMD version' - run: | - VERSION=$(curl -s https://api.github.com/repos/pmd/pmd/releases/latest | grep '.tag_name' | sed 's:.*/::' | sed 's:",::') - echo $VERSION - echo -n $VERSION > pmd/pmd-version.txt - # Install PMD - name: 'Install PMD' run: | - PMD_VERSION=`cat pmd/pmd-version.txt` + PMD_VERSION=$(curl -s https://api.github.com/repos/pmd/pmd/releases/latest | grep '.tag_name' | sed 's:.*/::' | sed 's:",::') wget https://github.com/pmd/pmd/releases/download/pmd_releases%2F$PMD_VERSION/pmd-bin-$PMD_VERSION.zip unzip pmd-bin-$PMD_VERSION.zip -d ~ mv ~/pmd-bin-$PMD_VERSION ~/pmd diff --git a/.github/workflows/dependabot-approve-and-auto-merge.yml b/.github/workflows/dependabot-approve-and-auto-merge.yml new file mode 100644 index 00000000..0c8f61ac --- /dev/null +++ b/.github/workflows/dependabot-approve-and-auto-merge.yml @@ -0,0 +1,38 @@ +name: Dependabot Pull Request Approve and Merge +on: pull_request_target +permissions: + pull-requests: write + contents: write +jobs: + # Auto merge Dependabot PRs for: + # - patch updates on prod dependencies + # - minor updates on dev dependencies + dependabot-auto-merge: + # Only run for Dependabot PRs + if: ${{ github.actor == 'dependabot[bot]' }} + runs-on: ubuntu-latest + steps: + - name: "Fetch Dependabot metadata" + id: dependabot + uses: dependabot/fetch-metadata@v1 + + - name: "Check auto merge conditions" + id: auto-merge + if: | + ( + steps.dependabot.outputs.update-type == 'version-update:semver-patch' && + contains('direct:production,indirect:production', steps.dependabot.outputs.dependency-type) + ) || ( + contains('version-update:semver-minor,version-update:semver-patch', steps.dependabot.outputs.update-type) && + contains('direct:development,indirect:development', steps.dependabot.outputs.dependency-type) + ) + run: echo "::notice ::auto-merge conditions satisfied" + + - name: "Approve and merge PR" + if: ${{ steps.auto-merge.conclusion == 'success' }} + run: | + gh pr review --approve "$PR_URL" + gh pr merge --auto --squash "$PR_URL" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ github.event.pull_request.html_url }} diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml deleted file mode 100644 index cebfc1b4..00000000 --- a/.github/workflows/packaging.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Unique name for this workflow -name: Packaging - -# Definition when the workflow should run -on: - release: - types: [released] - -# Jobs to be executed -jobs: - packaging: - runs-on: ubuntu-latest - steps: - # Install Salesforce CLI - - name: Install Salesforce CLI - run: | - wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz - mkdir sfdx-cli - tar xJf sfdx-linux-amd64.tar.xz -C sfdx-cli --strip-components 1 - ./sfdx-cli/install - # Checkout the code in the pull request - - name: 'Checkout source code' - uses: actions/checkout@v3 - with: - #token: ${{ secrets.PAT }} - ref: 'main' - - # Store secret for dev hub - - name: 'Populate auth file with DEVHUB_SFDX_URL secret' - shell: bash - run: 'echo ${{ secrets.DEVHUB_SFDX_URL}} > ./DEVHUB_SFDX_URL.txt' - - # Authenticate dev hub - - name: 'Authenticate Dev Hub' - run: 'sfdx force:auth:sfdxurl:store -f ./DEVHUB_SFDX_URL.txt -a devhub -d' - - # Remove auth file - - name: Remove auth file - run: rm -f ./DEVHUB_SFDX_URL.txt - - # Add namespace to project config - - name: Add namespace to project config - run: | - sed -i 's,"namespace": "","namespace": "LabsActionPlans",' sfdx-project.json - - # Update release number in sfdx-project.json - - name: Update Package number in sfdx-project.json - run: | - versionNumber="${{ github.event.release.tag_name }}" - versionName="${{ github.event.release.name }}" - versionNameRegex="\"versionName\": \".*\"" - versionNumberRegex="\"versionNumber\": \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.NEXT\"" - newVersionName="\"versionName\": \"${versionName}\"" - newVersionNumber="\"versionNumber\": \"${versionNumber/v/}.NEXT\"" - sed -i -E "s,${versionNameRegex},${newVersionName}," sfdx-project.json - sed -i -E "s,${versionNumberRegex},${newVersionNumber}," sfdx-project.json - - # Create package version and extract its id - - name: Create package version - id: create-package-version - run: | - set +e - json=$(sfdx force:package:version:create -c -p ActionPlans --path sfdx-source/LabsActionPlans --installationkeybypass -w 20 --json) - echo $json - status=$(echo $json | jq '.status') - if [ $status == "0" ]; then - packageVersionId=$(echo $json | jq '.result.SubscriberPackageVersionId') - echo "::set-output name=packageVersionId::$packageVersionId" - else - echo "sfdx force:package:version:create failed" - fi - exit $status - - # Update sfdx-project.json and README to use only latest package version - #- name: 'Update sfdx-project.json and README' - # id: packaging-updater - # uses: trailheadapps/github-action-sfdx-packaging-updater@main - - # Remove namespace from project config - - name: Remove namespace from project config - run: | - sed -i 's,"namespace": "LabsActionPlans","namespace": "",' sfdx-project.json - - # Update sfdx-project.json - - name: 'Commit changes' - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: 'Created new package version' - tagging_message: '${{ github.event.release.tag_name }}' - file_pattern: sfdx-project.json README.md - push_options: '--force' diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4a5562ba..bc29f04c 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -10,7 +10,11 @@ on: - 'config/**' - 'data/**' workflow_dispatch: - push: + +concurrency: + group: pr-tests-${{ github.ref }}-1 + cancel-in-progress: true + # Jobs to be executed jobs: check-pmd: @@ -21,16 +25,10 @@ jobs: - name: 'Checkout source code' uses: actions/checkout@v3 - - name: 'Use latest PMD version' - run: | - VERSION=$(curl -s https://api.github.com/repos/pmd/pmd/releases/latest | grep '.tag_name' | sed 's:.*/::' | sed 's:",::') - echo $VERSION - echo -n $VERSION > pmd/pmd-version.txt - # Install PMD - name: 'Install PMD' run: | - PMD_VERSION=`cat pmd/pmd-version.txt` + PMD_VERSION=$(curl -s https://api.github.com/repos/pmd/pmd/releases/latest | grep '.tag_name' | sed 's:.*/::' | sed 's:",::') wget https://github.com/pmd/pmd/releases/download/pmd_releases%2F$PMD_VERSION/pmd-bin-$PMD_VERSION.zip unzip pmd-bin-$PMD_VERSION.zip -d ~ mv ~/pmd-bin-$PMD_VERSION ~/pmd @@ -48,13 +46,17 @@ jobs: uses: actions/checkout@v3 # Install Salesforce CLI - - name: 'Install Salesforce CLI' + - name: 'Install Salesforce sfdx CLI' + run: | + npm install sfdx-cli --location=global + nodeInstallPath=$(npm config get prefix) + echo "$nodeInstallPath/bin" >> $GITHUB_PATH + sfdx --version + + - name: 'Install Salesforce sf CLI' run: | - wget https://developer.salesforce.com/media/salesforce-cli/sfdx/channels/stable/sfdx-linux-x64.tar.xz - mkdir ~/sfdx - tar xJf sfdx-linux-x64.tar.xz -C ~/sfdx --strip-components 1 - echo "$HOME/sfdx/bin" >> $GITHUB_PATH - ~/sfdx/bin/sfdx version + npm install @salesforce/cli --global + sf --version # Store secret for dev hub - name: 'Populate auth file with DEVHUB_SFDX_URL secret' @@ -69,7 +71,7 @@ jobs: # Authenticate dev hub - name: 'Authenticate Dev Hub' - run: sfdx auth:sfdxurl:store -f ./DEVHUB_SFDX_URL.txt -a devhub -d + run: sf org login sfdx-url --sfdx-url-file ./DEVHUB_SFDX_URL.txt --alias devhub --set-default-dev-hub # Add namespace to project config - name: Add namespace to project config @@ -78,30 +80,35 @@ jobs: # Create scratch org - name: 'Create scratch org' - run: sfdx force:org:create -f config/project-scratch-def.json -a ActionPlans -s -d 1 -w 20 --noancestors + #run: sfdx force:org:create -f config/project-scratch-def.json -a ActionPlans -s -d 1 -w 20 --no-ancestors + run: sf org create scratch --definition-file config/project-scratch-def.json --alias ActionPlans --set-default --no-ancestors --duration-days 1 --wait 20 --target-dev-hub devhub # Deploy source to scratch org - name: 'Push source to scratch org' - run: sfdx force:source:push + #run: sfdx force:source:push + run: sf deploy metadata --target-org ActionPlans # Assign permissionset - name: 'Assign permissionset to default user' - run: sfdx force:user:permset:assign -n Action_Plans_Admin + #run: sfdx force:user:permset:assign -n Action_Plans_Admin + run: sf org assign permset --name Action_Plans_Admin --target-org ActionPlans # Run Apex tests in scratch org - name: 'Run Apex tests' - run: sfdx force:apex:test:run --codecoverage --resultformat human -l RunLocalTests --wait 20 --outputdir ./ + #run: sfdx force:apex:test:run --codecoverage --detailedcoverage --resultformat human -l RunLocalTests --wait 20 --outputdir ./ + run: sf apex run test --code-coverage --detailed-coverage --result-format human --wait 20 --test-level RunLocalTests --output-dir ./ # Upload code coverage to Codecov.io - name: 'Upload code coverage for Apex to Codecov.io' uses: codecov/codecov-action@v3 with: flags: Apex + token: ${{ secrets.CODECOV_TOKEN }} # Housekeeping - name: 'Delete scratch org' if: always() - run: sfdx force:org:delete --noprompt -u ActionPlans + run: sf org delete scratch --no-prompt --target-org ActionPlans # Remove namespace from project config - name: Remove namespace from project config diff --git a/.husky/pre-commit b/.husky/pre-commit index d63410f7..6e9bf51f 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,11 +1,4 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" -VERSION=$(curl -s https://api.github.com/repos/pmd/pmd/releases/latest | grep '.tag_name' | sed 's:.*/::' | sed 's:",::') -echo $VERSION - -printf '%s' "$VERSION" > pmd/pmd-version.txt -git add pmd/pmd-version.txt - -npm run updateHighlight -npx lint-staged \ No newline at end of file +npm run precommit diff --git a/.prettierignore b/.prettierignore index be82c773..749dc553 100755 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ .localdevserver .sfdx +.sf .vscode/settings.json data/ diff --git a/.sfdx-scanner/config.json b/.sfdx-scanner/config.json new file mode 100644 index 00000000..e74d5ffb --- /dev/null +++ b/.sfdx-scanner/config.json @@ -0,0 +1,20 @@ +{ + "engines": [ + { + "name": "eslint", + "targetPatterns": ["**/*.js", "!**/lwc/**/*.js", "!**/node_modules/**", "!**/bower_components/**", "!**/jquery*.js"], + "disabled": false + }, + { + "name": "eslint-lwc", + "targetPatterns": ["**/lwc/**/*.js", "!**/node_modules/**"], + "disabled": true + }, + { + "name": "CPD", + "targetPatterns": ["**/*.cls", "**/*.trigger", "**/*.java", "**/*.page", "**/*.component", "**/*.xml", "!**/node_modules/**", "!**/*-meta.xml"], + "disabled": true, + "minimumTokens": "100" + } + ] +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 556fbb90..eee32f43 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,15 +1,14 @@ { - "recommendations": [ - "salesforce.salesforcedx-vscode", - "redhat.vscode-xml", - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - "financialforce.lana", - "peterweinberg.apexdox-vs-code", - "chuckjonas.apex-pmd", - "eg2.vscode-npm-script", - "matteopieroni.refresh-npm-packages", - "subc4i.sublime-mavensmate-monokai-apex", - "PKief.material-icon-theme" - ] + "recommendations": [ + "chuckjonas.apex-pmd", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "financialforce.lana", + "matteopieroni.refresh-npm-packages", + "peterweinberg.apexdox-vs-code", + "pkief.material-icon-theme", + "redhat.vscode-xml", + "salesforce.salesforcedx-vscode", + "subc4i.sublime-mavensmate-monokai-apex" + ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 00fc2889..a05f0e97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,62 +5,187 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased](https://github.com/SalesforceLabs/ActionPlansV4/compare/4.2.1...HEAD) +## [Unreleased](https://github.com/dschach/ActionPlansV4/compare/4.2.1...HEAD) ### Merged -- Cosmetic rearrangements, apexdoc [`#55`](https://github.com/SalesforceLabs/ActionPlansV4/pull/55) -- 4.3.0 Queues, Child Objects [`#53`](https://github.com/SalesforceLabs/ActionPlansV4/pull/53) -- Version 4.3.0 pt 2 [`#47`](https://github.com/SalesforceLabs/ActionPlansV4/pull/47) -- Version 4.3.0 [`#44`](https://github.com/SalesforceLabs/ActionPlansV4/pull/44) -- Codecov to v3 [`#41`](https://github.com/SalesforceLabs/ActionPlansV4/pull/41) - -## [4.2.1](https://github.com/SalesforceLabs/ActionPlansV4/compare/4.2.0...4.2.1) - 2022-05-25 +- build(deps-dev): bump lint-staged from 13.1.2 to 13.2.0 [`#7`](https://github.com/dschach/ActionPlansV4/pull/7) +- build(deps-dev): bump eslint from 8.35.0 to 8.36.0 [`#6`](https://github.com/dschach/ActionPlansV4/pull/6) +- build(deps-dev): bump eslint from 8.34.0 to 8.35.0 [`#4`](https://github.com/dschach/ActionPlansV4/pull/4) +- feat(tests): update tests (assertions, messages) [`#3`](https://github.com/dschach/ActionPlansV4/pull/3) +- feat: update API to 57.0 [`#1`](https://github.com/dschach/ActionPlansV4/pull/1) +- Bump github/codeql-action from 1 to 2 [`#59`](https://github.com/dschach/ActionPlansV4/pull/59) +- Fix assigned to field [`#60`](https://github.com/dschach/ActionPlansV4/pull/60) +- Archived flag, dependent task fixes, SOQL optimization [`#58`](https://github.com/dschach/ActionPlansV4/pull/58) +- Cosmetic rearrangements, apexdoc [`#55`](https://github.com/dschach/ActionPlansV4/pull/55) +- 4.3.0 Queues, Child Objects [`#53`](https://github.com/dschach/ActionPlansV4/pull/53) +- Version 4.3.0 pt 2 [`#47`](https://github.com/dschach/ActionPlansV4/pull/47) +- Version 4.3.0 [`#44`](https://github.com/dschach/ActionPlansV4/pull/44) +- Codecov to v3 [`#41`](https://github.com/dschach/ActionPlansV4/pull/41) + +### Commits + +- build(npm): update package dependencies [`e40b10a`](https://github.com/dschach/ActionPlansV4/commit/e40b10a0129cc415527a4876ae6bf2f5893369b5) +- lightning lookup w/o API v1 [`e8dac8e`](https://github.com/dschach/ActionPlansV4/commit/e8dac8e7d0ab626fbb18bce7587a092b80a646cb) +- docs(ApexDox): rerun ApexDox [`bc720e2`](https://github.com/dschach/ActionPlansV4/commit/bc720e21f85ee44c9fbecd2ddc9c5b12523b24a4) +- docs(ApexDox): include Installation & Changelog [`4910af9`](https://github.com/dschach/ActionPlansV4/commit/4910af9d9714cb57ce662e0057c00a97a5897e3f) +- feat(docs): ApexDox version upgrade [`178e1ce`](https://github.com/dschach/ActionPlansV4/commit/178e1ce30ff4bcf6505429fcf809e7ec742f08c3) +- build: move tests folder into classes [`99d78d5`](https://github.com/dschach/ActionPlansV4/commit/99d78d5a3302b6881a99d01c370c3c6e7cc523f4) +- Tests use Assert class [`59d6ef2`](https://github.com/dschach/ActionPlansV4/commit/59d6ef2150bf29d68d79014be463923e83e39e35) +- build(sfdx): change sfdx to sf commands [`994b3f2`](https://github.com/dschach/ActionPlansV4/commit/994b3f241cd5e5ab81955571bc6ad9ab839d4c38) +- revert(API): use 56.0 to avoid GVS bug [`6eb588a`](https://github.com/dschach/ActionPlansV4/commit/6eb588a4439d1787e613995f4dbe6e9c808df7e1) +- feat: finish Professional Edition template lookup [`415fdcf`](https://github.com/dschach/ActionPlansV4/commit/415fdcfc8f784af02a6b5c22a25e38e52dffce93) +- docs: update CanTheUser comments [`22ea89c`](https://github.com/dschach/ActionPlansV4/commit/22ea89c57e2a545cb2443e4f8f9c13aabff9adb9) +- API 56.0 [`4303659`](https://github.com/dschach/ActionPlansV4/commit/43036599390a3fec5617f9b39986b030382960cb) +- fix: page redirect on template from object [`70f43ba`](https://github.com/dschach/ActionPlansV4/commit/70f43ba924930914499b9ad3cdc8d5dc0c9796be) +- feat(sfdx): update sfdx to sf [`f360666`](https://github.com/dschach/ActionPlansV4/commit/f36066624737f029454d9eed5d28a81c6309f24e) +- fix: remove unnecessary jsencode [`96070b1`](https://github.com/dschach/ActionPlansV4/commit/96070b187dda50d7cfe21a897868c690976b750c) +- fix: redirect on template choice for records [`8bf011b`](https://github.com/dschach/ActionPlansV4/commit/8bf011b5eb9e965f0f6016233b81a1aa239edc25) +- Deploy rules & scripts [`5b80488`](https://github.com/dschach/ActionPlansV4/commit/5b80488663d56cc79ba90ffcf6a727c44d1a588a) +- APTemplate lookup actions [`d34eaaf`](https://github.com/dschach/ActionPlansV4/commit/d34eaaf3d3c6958bb5115215259b81a491dfe266) +- fix(docs): update ApexDox [`e8481e8`](https://github.com/dschach/ActionPlansV4/commit/e8481e82bce1c97f8b44a5e47178f8ca815c8824) +- ci(codeQL): delete codeQL d/t IP address [`fa066cf`](https://github.com/dschach/ActionPlansV4/commit/fa066cfc4ddeb5017957abe873bfc8ad22f155f6) +- dependabot auto-merge [`b5e5d4f`](https://github.com/dschach/ActionPlansV4/commit/b5e5d4f4a1e1e2db2f9ffd8e09b4e7ffd67488cf) +- docs: cleanup code, document variables [`f27e8dc`](https://github.com/dschach/ActionPlansV4/commit/f27e8dccc8c4977a859e70a939b6c34a624729e8) +- feat: Update tests to use Assert class [`2069b97`](https://github.com/dschach/ActionPlansV4/commit/2069b97f7a65a68966efb2c49867a05a1f587719) +- fix(build): Update plugin dependencies [`4bf530c`](https://github.com/dschach/ActionPlansV4/commit/4bf530c6e5f1b60dcef86408e3acffc2376993dd) +- Update scratch org definition files [`851171c`](https://github.com/dschach/ActionPlansV4/commit/851171c6b2120b3e421909bb627fc2e454a2d4f7) +- chore: Scratch org shape updates [`fbe390e`](https://github.com/dschach/ActionPlansV4/commit/fbe390e7745f2d508a221d900d98f47feda0f061) +- docs(Apex): test comments [`5056ebc`](https://github.com/dschach/ActionPlansV4/commit/5056ebc9d8665fc70f4bf6d566a160c86251d5b6) +- ci: update PR sfdx to sf, npm installation [`77fa739`](https://github.com/dschach/ActionPlansV4/commit/77fa73957caf481dd5081a258d6b5a9e3c72decc) +- build(changelog): instructions & tag prefix [`0ae955b`](https://github.com/dschach/ActionPlansV4/commit/0ae955b8fc5056351c4c1f4ad66690fb56f53ea5) +- Beta 4.3.0-9 [`d4b477c`](https://github.com/dschach/ActionPlansV4/commit/d4b477c46a7487fd6ff07784b91ac99979e8bc71) +- fix(sfdx): sf apex test correct config [`6a030e4`](https://github.com/dschach/ActionPlansV4/commit/6a030e43da9aaff5bd9780803996f9fe63736cf1) +- feat: sfdx-scanner config [`42c6889`](https://github.com/dschach/ActionPlansV4/commit/42c6889df390a41195629f11d8453d429d64e769) +- docs(README): add image descriptions [`2b9f999`](https://github.com/dschach/ActionPlansV4/commit/2b9f999452002ff43152102cbb85348dbd0e1d7e) +- Dependabot alerts [`dea7b92`](https://github.com/dschach/ActionPlansV4/commit/dea7b929eaf6d555762795865fcfd2d12181d403) +- Bug Report Template [`acfda0a`](https://github.com/dschach/ActionPlansV4/commit/acfda0ae35984f3b48103be7fea9cce6411d2791) +- Bug template [`516f70c`](https://github.com/dschach/ActionPlansV4/commit/516f70c863549733964884939ef6b2cd77ca46d1) +- build(pmd): remove updatepmd [`0ef9783`](https://github.com/dschach/ActionPlansV4/commit/0ef9783b4c94c86ba07429ca36aa1abb650d9c19) +- feat(scripts): update latest jQuery [`992988e`](https://github.com/dschach/ActionPlansV4/commit/992988e433f53d6cf7099902d2b9ab79ba86503e) +- fix(lookup): escape=false for record name [`5fae8c0`](https://github.com/dschach/ActionPlansV4/commit/5fae8c09373dc86c9cc3ae30ad6ac7d27bb47770) +- Changelog [`6516aa9`](https://github.com/dschach/ActionPlansV4/commit/6516aa97d738d0742cf552c8cd608d5761c3ae09) + +## [4.2.1](https://github.com/dschach/ActionPlansV4/compare/4.2.0...4.2.1) - 2022-05-25 ### Merged -- Version 4.2.1 [`#37`](https://github.com/SalesforceLabs/ActionPlansV4/pull/37) -- Namespace to sample code [`#36`](https://github.com/SalesforceLabs/ActionPlansV4/pull/36) -- v4.2.0 [`#30`](https://github.com/SalesforceLabs/ActionPlansV4/pull/30) +- Version 4.2.1 [`#37`](https://github.com/dschach/ActionPlansV4/pull/37) +- Namespace to sample code [`#36`](https://github.com/dschach/ActionPlansV4/pull/36) +- v4.2.0 [`#30`](https://github.com/dschach/ActionPlansV4/pull/30) ### Fixed -- Version 4.2.1 (#37) [`#35`](https://github.com/SalesforceLabs/ActionPlansV4/issues/35) [`#34`](https://github.com/SalesforceLabs/ActionPlansV4/issues/34) -- Namespace to sample code (#36) [`#35`](https://github.com/SalesforceLabs/ActionPlansV4/issues/35) +- Version 4.2.1 (#37) [`#35`](https://github.com/dschach/ActionPlansV4/issues/35) [`#34`](https://github.com/dschach/ActionPlansV4/issues/34) +- Namespace to sample code (#36) [`#35`](https://github.com/dschach/ActionPlansV4/issues/35) -## [4.2.0](https://github.com/SalesforceLabs/ActionPlansV4/compare/4.1.0...4.2.0) - 2022-04-01 +### Commits -### Merged +- Correct Apex global method syntax [`eaee330`](https://github.com/dschach/ActionPlansV4/commit/eaee3301c8502edcf27a99c0955b44ce063ca0d0) +- ApexDox update [`da133ff`](https://github.com/dschach/ActionPlansV4/commit/da133ffed6f45bd0c4ebb8cf498a0223ed5d02d0) +- Promote v2.4.0.7 [`70849b9`](https://github.com/dschach/ActionPlansV4/commit/70849b9570742c112054b161973d9584cf0cc5a1) +- Changelog, packaging workflow [`5b77ddb`](https://github.com/dschach/ActionPlansV4/commit/5b77ddba5da486f283825e3304d1be5b8dce298c) +- Packaging workflow [`9107fd9`](https://github.com/dschach/ActionPlansV4/commit/9107fd99c3f3f36c4d070960412837f98b20af88) + +## [4.2.0](https://github.com/dschach/ActionPlansV4/compare/4.1.0...4.2.0) - 2022-04-01 -- Specify Action Plan Name in Invocable Apex [`#27`](https://github.com/SalesforceLabs/ActionPlansV4/pull/27) -- Prettier, JS fixing [`#26`](https://github.com/SalesforceLabs/ActionPlansV4/pull/26) -- Highlight.js to 11.5 [`#25`](https://github.com/SalesforceLabs/ActionPlansV4/pull/25) -- Add changelog [`#24`](https://github.com/SalesforceLabs/ActionPlansV4/pull/24) -- Bump minimist from 1.2.5 to 1.2.6 [`#23`](https://github.com/SalesforceLabs/ActionPlansV4/pull/23) -- Upgrading Instructions [`#22`](https://github.com/SalesforceLabs/ActionPlansV4/pull/22) -- Add Codecov [`#21`](https://github.com/SalesforceLabs/ActionPlansV4/pull/21) +### Merged -## [4.1.0](https://github.com/SalesforceLabs/ActionPlansV4/compare/4.0.0-9...4.1.0) - 2022-03-17 +- Specify Action Plan Name in Invocable Apex [`#27`](https://github.com/dschach/ActionPlansV4/pull/27) +- Prettier, JS fixing [`#26`](https://github.com/dschach/ActionPlansV4/pull/26) +- Highlight.js to 11.5 [`#25`](https://github.com/dschach/ActionPlansV4/pull/25) +- Add changelog [`#24`](https://github.com/dschach/ActionPlansV4/pull/24) +- Bump minimist from 1.2.5 to 1.2.6 [`#23`](https://github.com/dschach/ActionPlansV4/pull/23) +- Upgrading Instructions [`#22`](https://github.com/dschach/ActionPlansV4/pull/22) +- Add Codecov [`#21`](https://github.com/dschach/ActionPlansV4/pull/21) + +### Commits + +- ApexDox remove unused modifiers [`3b321db`](https://github.com/dschach/ActionPlansV4/commit/3b321dbd7d72eb7214e6533d5f24da105c76e6d5) +- Create codeql-analysis.yml [`2822bc5`](https://github.com/dschach/ActionPlansV4/commit/2822bc510e267148e3800d3241414893d0b0d92e) +- Highlight inline code security update [`57662e7`](https://github.com/dschach/ActionPlansV4/commit/57662e75737928c6362853cbaec4bafd199b6f25) +- Pull Request workflow update [`2c84f4d`](https://github.com/dschach/ActionPlansV4/commit/2c84f4dfd17062ddf4d08ff04d773f2a3d3f3d4b) +- Update and rename CONTRIBUTION.md to CONTRIBUTING.md [`cb7f3c1`](https://github.com/dschach/ActionPlansV4/commit/cb7f3c1c1ceea838050e6afe65eb89b556ab1d38) +- update Prettierignore [`37aeafa`](https://github.com/dschach/ActionPlansV4/commit/37aeafa8c42bdb08ba167eb3e82898ba16a2abf1) +- Add link to Apex documentation [`96f9cde`](https://github.com/dschach/ActionPlansV4/commit/96f9cde62ce62e1e568d609838250653c35ec7cb) +- Sample template update [`4c957ca`](https://github.com/dschach/ActionPlansV4/commit/4c957ca63a3a93f0378d95bba563ad86402b990d) +- Update CONTRIBUTING.md [`9e3b175`](https://github.com/dschach/ActionPlansV4/commit/9e3b175772293fdebb6ae0a17e574d0d3f8cbc33) +- Add AppExchange listing to README [`760dfc9`](https://github.com/dschach/ActionPlansV4/commit/760dfc91b97ed879aeec8d0ca1228cc46f4ad154) +- Sample flow update [`397b763`](https://github.com/dschach/ActionPlansV4/commit/397b76342026c63507cacc97a147a43287cc02ee) + +## [4.1.0](https://github.com/dschach/ActionPlansV4/compare/4.0.0-9...4.1.0) - 2022-03-17 ### Merged -- Release Ready [`#19`](https://github.com/SalesforceLabs/ActionPlansV4/pull/19) -- Pre-Release (beta15) [`#18`](https://github.com/SalesforceLabs/ActionPlansV4/pull/18) -- Pre-Commit ApexDox cleanup [`#16`](https://github.com/SalesforceLabs/ActionPlansV4/pull/16) -- Scripts, Cleanup, New Build [`#15`](https://github.com/SalesforceLabs/ActionPlansV4/pull/15) +- Release Ready [`#19`](https://github.com/dschach/ActionPlansV4/pull/19) +- Pre-Release (beta15) [`#18`](https://github.com/dschach/ActionPlansV4/pull/18) +- Pre-Commit ApexDox cleanup [`#16`](https://github.com/dschach/ActionPlansV4/pull/16) +- Scripts, Cleanup, New Build [`#15`](https://github.com/dschach/ActionPlansV4/pull/15) + +### Commits + +- Update issue templates [`e2be869`](https://github.com/dschach/ActionPlansV4/commit/e2be869204599eed28a990fffa43837c3ea3b5be) +- Import file language [`5be81e1`](https://github.com/dschach/ActionPlansV4/commit/5be81e17568678735f289c05a080589a5e63bfab) +- Start package versioning via release [`afd008a`](https://github.com/dschach/ActionPlansV4/commit/afd008adb2f753dbe5742e9027ea70121b169b9d) +- ISV toolkit md exclusion [`022c65a`](https://github.com/dschach/ActionPlansV4/commit/022c65a67eba69f1c220e006a70ca6ececad03b9) +- AppExchange link [`31f2e02`](https://github.com/dschach/ActionPlansV4/commit/31f2e028c89548c1cea2677693f0dabc277d9ae1) +- Apex highlighting [`0609b37`](https://github.com/dschach/ActionPlansV4/commit/0609b3733a8f5066037768cb1ac6145357d80b6f) ## 4.0.0-9 - 2022-02-23 ### Merged -- AP Task AssignedTo field cleanup [`#14`](https://github.com/SalesforceLabs/ActionPlansV4/pull/14) -- Managed vs Unmanaged Project Config [`#13`](https://github.com/SalesforceLabs/ActionPlansV4/pull/13) -- Permissions Updates [`#12`](https://github.com/SalesforceLabs/ActionPlansV4/pull/12) -- Remove tests from ApexDox [`#10`](https://github.com/SalesforceLabs/ActionPlansV4/pull/10) -- Security, code coverage, Print page, Spring 22! [`#7`](https://github.com/SalesforceLabs/ActionPlansV4/pull/7) -- Code and documentation cleanup [`#6`](https://github.com/SalesforceLabs/ActionPlansV4/pull/6) -- PMD-suggested cleanup [`#5`](https://github.com/SalesforceLabs/ActionPlansV4/pull/5) -- Rename Template Task [`#4`](https://github.com/SalesforceLabs/ActionPlansV4/pull/4) -- Version 4.0.0.7 [`#3`](https://github.com/SalesforceLabs/ActionPlansV4/pull/3) -- Code comment cleanup [`#2`](https://github.com/SalesforceLabs/ActionPlansV4/pull/2) -- ApexDocs, Project Files, PMD rules [`#1`](https://github.com/SalesforceLabs/ActionPlansV4/pull/1) +- AP Task AssignedTo field cleanup [`#14`](https://github.com/dschach/ActionPlansV4/pull/14) +- Managed vs Unmanaged Project Config [`#13`](https://github.com/dschach/ActionPlansV4/pull/13) +- Permissions Updates [`#12`](https://github.com/dschach/ActionPlansV4/pull/12) +- Remove tests from ApexDox [`#10`](https://github.com/dschach/ActionPlansV4/pull/10) +- Security, code coverage, Print page, Spring 22! [`#7`](https://github.com/dschach/ActionPlansV4/pull/7) +- Code and documentation cleanup [`#6`](https://github.com/dschach/ActionPlansV4/pull/6) +- PMD-suggested cleanup [`#5`](https://github.com/dschach/ActionPlansV4/pull/5) +- Rename Template Task [`#4`](https://github.com/dschach/ActionPlansV4/pull/4) +- Version 4.0.0.7 [`#3`](https://github.com/dschach/ActionPlansV4/pull/3) +- Code comment cleanup [`#2`](https://github.com/dschach/ActionPlansV4/pull/2) +- ApexDocs, Project Files, PMD rules [`#1`](https://github.com/dschach/ActionPlansV4/pull/1) + +### Commits + +- Documentation with ApexDox [`236c66b`](https://github.com/dschach/ActionPlansV4/commit/236c66b82c79062836ee059917842bf25d42ac39) +- Iniital commit, updated for namespace [`f4d7498`](https://github.com/dschach/ActionPlansV4/commit/f4d74984e51128788ee329a03764b521b9515b68) +- migrate to new sfdx-falcon directory [`0cde1dc`](https://github.com/dschach/ActionPlansV4/commit/0cde1dc403755cdf37dd7bd9e31155fce65277df) +- move to sfdx-source falcon directory structure [`2edf46d`](https://github.com/dschach/ActionPlansV4/commit/2edf46d356f0e2c029159c2818d874a3a6192620) +- package files [`16c26fc`](https://github.com/dschach/ActionPlansV4/commit/16c26fc10e24f9331c16973cca7c9ed0b2ce753c) +- Prettier first pass [`9467195`](https://github.com/dschach/ActionPlansV4/commit/94671959b397325f040c898a1e01173eafe284cc) +- ApexDox [`1fc534b`](https://github.com/dschach/ActionPlansV4/commit/1fc534ba2f94fd715972537598f5146760866aed) +- ApexDox [`48589f7`](https://github.com/dschach/ActionPlansV4/commit/48589f7481ed8bb5baa565def244c4029f0dd0d2) +- First commit - ReadMe & Installation [`406674a`](https://github.com/dschach/ActionPlansV4/commit/406674a13cb7b5c68db946ff8038c9df16e62d63) +- package files [`45278ca`](https://github.com/dschach/ActionPlansV4/commit/45278caa0d7f0d97141c5950fa0be8831e7c1c95) +- Install/update prettier [`62fd10a`](https://github.com/dschach/ActionPlansV4/commit/62fd10a3fad113f2ee39a0e6dc642d1c84dc4dfe) +- Exclude unmanaged and unpackaged metadata [`32bcb00`](https://github.com/dschach/ActionPlansV4/commit/32bcb0020732b1fa6aba8c9776fe1b0ac3d2b474) +- Unmanaged metadata for managed installation [`ed24492`](https://github.com/dschach/ActionPlansV4/commit/ed244927e79d18b8bb5085364c1481e92d97e6b4) +- Remove non-dev org actions [`29208d8`](https://github.com/dschach/ActionPlansV4/commit/29208d835bf4edd3952f981db85e30fbd21b6ae3) +- Install script for custom setting [`11e6b5d`](https://github.com/dschach/ActionPlansV4/commit/11e6b5d9e07f01a5a60521faa7a9632618fbfd66) +- Update for EE orgs [`83e459d`](https://github.com/dschach/ActionPlansV4/commit/83e459d805cfa59c2f381f53949ddcddeb7d9bd0) +- Fix lookup for portal users, custom setting DML [`dc6ea13`](https://github.com/dschach/ActionPlansV4/commit/dc6ea13871cf95df4d3d76f931edfdef373d04a1) +- Support unmanaged metadata [`f8681e8`](https://github.com/dschach/ActionPlansV4/commit/f8681e880dfae3eec6b2a5427b6df65a9141224b) +- Add gitignore [`433c579`](https://github.com/dschach/ActionPlansV4/commit/433c57938dd801ad1078cfc58bb2aa7b3b01fba8) +- Documentation and support files [`9993d83`](https://github.com/dschach/ActionPlansV4/commit/9993d83093101ab05f5057b7f726350065c0c4f6) +- ApexDox [`c5c3144`](https://github.com/dschach/ActionPlansV4/commit/c5c314412d1f42d5138b9575c317333ecc18e83a) +- Simplify Account layout [`536459a`](https://github.com/dschach/ActionPlansV4/commit/536459a34b23fed29841d63a3b77fda154eca876) +- ApexDox [`2662ae8`](https://github.com/dschach/ActionPlansV4/commit/2662ae868db1d30dd87eec48e81cf8a9568cff65) +- Create first package version [`53b252f`](https://github.com/dschach/ActionPlansV4/commit/53b252febede7e20351f82346a2b0dfc68b4b7f6) +- Org metadata and ignore files [`0725de0`](https://github.com/dschach/ActionPlansV4/commit/0725de02a377057af7f4fb9f6901d6d8384176ba) +- Removed TradeStyle to allow installation in regular orgs [`fa17e9d`](https://github.com/dschach/ActionPlansV4/commit/fa17e9d97d6ef1349475d8b7cde49606011b62fb) +- Handle ID lists [`b07c6a7`](https://github.com/dschach/ActionPlansV4/commit/b07c6a72c5c8162d55510d4c50da52bd3e983855) +- Works in managed package with unmanaged objects [`ef595b4`](https://github.com/dschach/ActionPlansV4/commit/ef595b4c57f44ee08b2d94bcf27738ed485fd1f8) +- Simplify installation instructions [`bdb2de3`](https://github.com/dschach/ActionPlansV4/commit/bdb2de3a738f00eab23287965e354bdc2bbf41f6) +- Readme update, ignore record types [`1412184`](https://github.com/dschach/ActionPlansV4/commit/1412184ae57ace230eb73cb9652e9ecbdcd5c184) +- Fix fieldset test visibility bug [`644087e`](https://github.com/dschach/ActionPlansV4/commit/644087e795cae2214dd2a775259537e07c4fc811) +- Class and method accessibility [`7515c2a`](https://github.com/dschach/ActionPlansV4/commit/7515c2ac2c60047b2f6cda655b73c50afc4727e9) +- Remove debugs [`07e4ee7`](https://github.com/dschach/ActionPlansV4/commit/07e4ee75d69ba6a9fb8dbb34e5aba3cdb3bad8b3) +- Release version 4.0.0-6 [`3f7a3fa`](https://github.com/dschach/ActionPlansV4/commit/3f7a3fa615c1623aad90cc105284243904d6139d) +- Script for working with custom object invocable [`9fe7c54`](https://github.com/dschach/ActionPlansV4/commit/9fe7c54ae80fa57baf48603bafbeaf227861c6e2) +- Create custom setting on install [`c3f795c`](https://github.com/dschach/ActionPlansV4/commit/c3f795c8b833df25877746ba17579c1493f9c02f) +- New task layout [`c31ec9f`](https://github.com/dschach/ActionPlansV4/commit/c31ec9f4f91c89e21cdb476c4053c6f0140f963a) +- Unprotect custom metadata so users can edit [`f947d4b`](https://github.com/dschach/ActionPlansV4/commit/f947d4b2c6632a19ea680352799a75eac8bc6176) +- Beta 3 [`19ace7e`](https://github.com/dschach/ActionPlansV4/commit/19ace7e5d04c68e62bfb37125e5941ad119f6330) +- ApexDox [`0076c54`](https://github.com/dschach/ActionPlansV4/commit/0076c543bc60834541223e0da28c749ab6a33367) diff --git a/INSTALLATION.md b/INSTALLATION.md index c23b25b6..ab742000 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -28,23 +28,23 @@ Follow these instructions to deploy Action Plans to your org. 1. If you haven't already done so, authorize your hub org and provide it with an alias (**myhuborg** in the command below): - ``` - sfdx auth:web:login -d -a myhuborg + ```bash + sf org login web --set-default --alias myhuborg ``` 1. Clone this repository: - ``` + ```bash git clone https://github.com/SalesforceLabs/ActionPlansV4 cd ActionPlansV4 ``` 1. From the terminal window, run the installation script - ``` - npm run-script scratchorg + ```bash + npm run scratchorg ``` or - ``` + ```bash . scripts/scratchorg.sh ``` @@ -59,13 +59,13 @@ Start from a brand-new environment to avoid conflicts with previous work you may 1. Authorize your org and provide it with an alias (**myorg** in the command below): - ``` - sfdx auth:web:login -s -a myorg + ```bash + sf org login web --set-default --alias myorg ``` 1. Clone this repository: - ``` + ```bash git clone https://github.com/SalesforceLabs/ActionPlansV4 cd ActionPlansV4 ``` @@ -73,7 +73,7 @@ Start from a brand-new environment to avoid conflicts with previous work you may 1. If you are setting up a Developer Edition: go to **Setup**, and under **My Domain**, [register a My Domain](https://help.salesforce.com/articleView?id=domain_name_setup.htm&type=5). Then ensure that enhanced domains are activated. You may need to enable Salesforce Edge network first. 1. To run all the next steps at once, run this [command](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/scripts/unmanaged.sh) in the terminal: - ``` + ```bash . scripts/unmanaged.sh ``` The org will open. That's it! @@ -82,23 +82,27 @@ Start from a brand-new environment to avoid conflicts with previous work you may 1. Run this command to deploy the app. - ``` - sfdx force:source:deploy -p sfdx-source/LabsActionPlans --tracksource - ``` + ```bash + sf deploy metadata --source-dir sfdx-source/LabsActionPlans + ``` 2. Assign the `Action_Plans_Admin` permission set to the admin user. - ``` - sfdx force:user:permset:assign -n Action_Plans_Admin - ``` + ```bash + sf org assign permset --name Action_Plans_Admin + ``` 3. (Optional) [Load sample metadata](#optional-installation-instructions) (see below) + ```bash + sf deploy metadata --source-dir sfdx-source/unmanaged + ``` + 4. If your org isn't already open, open it now: - ``` - sfdx force:org:open -u myorg - ``` + ```bash + sf org open --target-org myorg + ``` 2. In App Launcher, select the **Action Plans** app. @@ -106,7 +110,7 @@ Start from a brand-new environment to avoid conflicts with previous work you may This repository contains several files that are relevant if you want to add sample data, or integrate modern web development tooling to your Salesforce development processes or to your continuous integration/continuous deployment processes. -### Data Import (Optional - NOT available if using the AppExchange managed package) +### Data/Metadata Import (Optional - NOT available if using the AppExchange managed package) - This repository creates sample data (Accounts, Contacts, Leads) if you choose to create a scratch org. To prevent this, go to the [scratch org definition](./config/project-scratch-def.json) and change `hasSampleData` to `false`. ``` @@ -114,64 +118,65 @@ This repository contains several files that are relevant if you want to add samp ``` - To create a sample Action Plan Template for Account onboarding, run the following: - ``` - sfdx force:apex:execute -f ./data/sample-data.apex + ```bash + sf apex run --file ./data/sample-data.apex ``` - To create - a sample Flow that uses the sample template - a sample Account layout - a sample Task layout - a sample report on open Action Plan-related Tasks - ``` - sfdx force:source:deploy -p sfdx-source/unmanaged --tracksource + ```bash + sf deploy metadata --source-dir sfdx-source/unmanaged ``` - You can also create other sample Account and Contact records by running the following command: - ``` - sfdx force:data:tree:import -p ./data/action-plan-data-plan.json + ```bash + sf data import tree --plan ./data/action-plan-data-plan.json ``` -### Data Import (Optional - ONLY if using the AppExchange managed package) +### Data/Metadata Import (Optional - ONLY if using the AppExchange managed package) - When FIRST installing the package, it will automatically create a sample Action Plan Template for Account onboarding. If you want to recreate it manually, run the following: - ``` - sfdx force:apex:execute -f ./data/sample-data-managed.apex + ```bash + sf apex run --file ./data/sample-data-managed.apex ``` - To create - a sample Flow that uses the sample template - a sample Account layout - a sample Task layout - a sample report on open Action Plan-related Tasks - ``` - sfdx force:source:deploy -p sfdx-source/unmanagedExtension --tracksource + ```bash + sf deploy metadata --source-dir sfdx-source/unmanagedExtension ``` - You can also create other sample Account and Contact records by running the following command: - ``` - sfdx force:data:tree:import -p ./data/action-plan-data-plan.json + ```bash + sf data import tree --plan ./data/action-plan-data-plan.json ``` ### Code formatting [Prettier](https://prettier.io/) is a code formatter used to ensure consistent formatting across your code base. To use Prettier with Visual Studio Code, install [this extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) from the Visual Studio Code Marketplace. The [.prettierignore](/.prettierignore) and [.prettierrc](/.prettierrc) files are provided as part of this repository to control the behavior of the Prettier formatter. -### Code linting +[Prettier Apex](https://github.com/dangmai/prettier-plugin-apex) is an extension that handles Apex-specific formatting and allows the removal of the extra line via the Prettier config file. To use it with Visual Studio Code, follow [these instructions](https://developer.salesforce.com/tools/vscode/en/user-guide/prettier) from the Salesforce Extensions site. -[ESLint](https://eslint.org/) is a popular JavaScript linting tool used to identify stylistic errors and erroneous constructs. To use ESLint with Visual Studio Code, install [this extension](https://marketplace.visualstudio.com/items?itemName=salesforce.salesforcedx-vscode) from the Visual Studio Code Marketplace. The [.eslintignore](/.eslintignore) file is provided as part of this repository to exclude specific files from the linting process in the context of Lightning Web Components development. + ### Pre-commit hook -This repository also comes with a [package.json](./package.json) file that makes it easy to set up a pre-commit hook that enforces code formatting and linting by running Prettier and ESLint every time you `git commit` changes. +This repository also comes with a [package.json](./package.json) file that makes it easy to set up a pre-commit hook that enforces code formatting by running Prettier every time you `git commit` changes. -To set up the formatting and linting pre-commit hook: +To set up the formatting pre-commit hook: 1. Install [Node.js](https://nodejs.org) if you haven't already done so -1. Run `npm install` in your project's root folder to install the Husky, ESLint, and Prettier modules (Note: Mac users should verify that Xcode command line tools are installed before running this command.) +2. Run `npm install` in your project's root folder to install the Husky and Prettier modules (Note: Mac users should verify that Xcode command line tools are installed before running this command.) -Husky will now run Prettier and ESLint automatically every time you commit changes, with some other updates if you installed the recommended extension ApexDox. The commit will fail if linting errors are detected. You can also run the formatting and linting from the command line using the following commands (check out [package.json](./package.json) for the full list): +Husky will now run Prettier automatically every time you commit changes, with some other updates if you installed the recommended extension ApexDox. You can also run the formatting from the command line using the following command (check out [package.json](./package.json) for the full list): -``` -npm run lint:lwc +```bash npm run prettier ``` diff --git a/README.md b/README.md index f2cc68d1..2e4f06eb 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # Action Plans -[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Latest Commit](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/ci.yml/badge.svg)](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/ci.yml) [![Latest Pull Request](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/pr.yml/badge.svg)](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/pr.yml) [![codecov](https://codecov.io/gh/salesforcelabs/actionplansv4/branch/main/graph/badge.svg?token=9BD97HKVUI)](https://codecov.io/gh/salesforcelabs/actionplansv4) [![Twitter](https://img.shields.io/twitter/follow/salesforce_labs.svg?style=social)](https://twitter.com/salesforce_labs) +[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Latest Commit](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/ci.yml/badge.svg)](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/ci.yml) [![Latest Pull Request](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/pr.yml/badge.svg)](https://github.com/SalesforceLabs/ActionPlansV4/actions/workflows/pr.yml) [![codecov](https://codecov.io/gh/salesforcelabs/actionplansv4/branch/main/graph/badge.svg?token=9BD97HKVUI)](https://codecov.io/gh/salesforcelabs/actionplansv4) [![Twitter](https://img.shields.io/twitter/follow/appexchange.svg?style=social)](https://twitter.com/appexchange) -## [Changelog](./CHANGELOG.md) +## [Changelog](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/CHANGELOG.md) # Action Plans Installation and Setup -## Please follow installation instructions, shown on the **[Installation page](./INSTALLATION.md)** +## Please follow installation instructions, shown on the **[Installation page](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/INSTALLATION.md)** -### [AppExchange](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/INSTALLATION.md#appexchange-managed-package---recommended) +### [AppExchange - Recommended](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/INSTALLATION.md#appexchange-managed-package---recommended) - [AppExchange Listing](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N4V00000Gg6NVUAZ) - [Post-intall extras](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/INSTALLATION.md#data-import-optional---only-if-using-the-appexchange-managed-package) @@ -120,7 +120,7 @@ Assign the appropriate Permission Set(s) to each user who will need to use Actio - `Action Plans Template Creator:` Full permissions for Action Plan Templates and AP Template Tasks. No Action Plan access. - `Action Plans Creator:` Read, Create, Edit, Delete for Action Plans and AP Tasks. Read-only for Action Plan Templates and APT Task Templates. - `Action Plans Import/Export:` Access to export and import Action Plan Template records. View the appropriate button for export and tab for import. -- `Action Plans User:` Read-only for Action Plans and AP Tasks. +- `Action Plans User:` Read-only for Action Plans and AP Tasks. Edit permission for Tasks should be provided via the user's profile or other permission sets. Uses for each Permission Set: - Some users may require visibility into the Action Plans related to those Tasks. These users need the `Action Plans User` Permission Set. It gives Read-only access to Action Plan. @@ -133,30 +133,37 @@ Note: The Apex used in Flows or via triggers does not require special permission # Using Action Plans with Custom Objects -## To Start Using an Object with Action Plans +## Start Using an Object with Action Plans 1. Create the object and be sure to check "Track Activities" for the object attrributes 1. Create a lookup field from Action Plan to the object. **Name the field the same as the object name.** The field label can be anything. - As an example, if you have a custom object named `MyObject__c`, you must name the field on Action Plan `MyObject__c` 1. Add the field to the `Related Objects` fieldset on Action Plan. 1. The related object will now be available for selection when creating a new Action Plan and relating it to an object. -1. Add the following code to the object trigger in `before delete` and `after undelete` contexts (removing the `LabsActionPlans` namespace if you're not using the managed package: +1. Add the following code to the object trigger in `before delete` and `after undelete` contexts (removing the `LabsActionPlans` namespace if you're not using the managed package): ```apex - LabsActionPlans.ActionPlansTriggerHandlers.actionPlansSObjectTriggerHandler( 'Custom_Object__c' ); + LabsActionPlans.ActionPlansTriggerHandlers.actionPlansSObjectTriggerHandler( 'CustomObject__c' ); ``` -![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/ActionPlanFieldSet.png) -## Adding a New Custom Object Action Plan button to the Action Plan object +![Field set on Action Plan with all related objects available and only some selected](doc-assets/readme/ActionPlanFieldSet.png) + +## Test Code for Additional Objects + +Don't forget to write a test class to cover the custom object trigger. If you're just going for coverage (not a best-practice!) just make a test method inserting and then deleting a record. +Unfortunately, the code in this package does not lend itself to easy creation of an Action Plan for a custom object... yet. + +## Adding a `Create Custom Object Action Plan` button to the Action Plan object While Action Plans already overrides the New Action Plan action, the New button will show a new Action Plan screen, but will not allow adding an existing template. (Perhaps this will be in a future release... safe harbor.) Create a custom button with the following format on the Action Plan object and add it to the related list on the custom object page layout: 1. Navigate to Setup > Object Manager > Action Plan > Buttons, Links, and Actions > New Button or Link 1. Give it a label and name, such as "New MyObject Action Plan" 1. Display Type is List Button. Uncheck the list checkbox. -1. Use the following format for the button (removing the `LabsActionPlans` namespace if you're not using the managed package): +1. Use the following format for the button (removing the `LabsActionPlans__` namespace if you're not using the managed package): ```plaintext {!URLFOR( $Action.LabsActionPlans__ActionPlan__c.New, null, [refType="CustomObject__c", refId=CustomObject__c.Id] )} ``` -## Create Action Plans for multiple Custom Object records +1. Be sure to remove the standard New button on the Action Plans related list and use this button instead. +## `Create Action Plans` for multiple Custom Object records Just as there is a button for Account list views to create multiple Action Plans, you can do the same for your custom object. Create a Visualforce page with the following code: ```xml @@ -188,7 +195,7 @@ Now you're ready to create your first template. Navigate to the Action Plans Tem The template screen looks like this: -![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/Template-Creation.png) +![](doc-assets/readme/Template-Creation.png) 1. Name - Template Name. 1. Description - An explanation of how the template should be used. @@ -223,25 +230,25 @@ If your org uses Task Record Types, you must specify which Record Type to use fo 1. Navigate to an Accounts list view. Select the Accounts for which you want to create Action Plans. Click on the "Create Account Action Plans" button. - ![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/Select-Accounts.png) + ![List view of Accounts with 50 selected. The "Create Account Action Plans" button is highlighted](doc-assets/readme/Select-Accounts.png) 1. Select the template you want to use by typing the name on the lookup and clicking on it. - ![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/Choose-template-step1.png) + ![Action Plan creation screen with 50 sample records indicated on the page layout](doc-assets/readme/Choose-template-step1.png) 1. Enter the information specific to this plan. Note that the Accounts you selected earlier are visible. - ![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/Choose-template-step2.png) + ![Filled-in Action Plan creation screen](doc-assets/readme/Choose-template-step2.png) 1. Save the Action Plan. Note: Action Plan creation is handled by a queueable (asynchronous) process. It can take a couple of minutes to be able to view all created records. - ![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/ActionPlan-Detail.png) + ![Single Action Plan detail screen](doc-assets/readme/ActionPlan-Detail.png) 1. Verify the Action Plan and the tasks. 1. Complete the first task on the Action Plan. - Note that the Action Plan is now in the correct related list and that this Account has one open activity and one closed activity. The third activity in the template is dependent and will be created only when its controlling task is complete. + Note that the Action Plan is now in the correct related list and that this Account has one open activity and one closed activity. The third activity in the template is dependent and will be created only when its controlling task is complete. (A Contact related list is shown here, but this applies equally to Accounts.) - ![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/AccountActionPlan-Detail.png) + ![Contact related lists showing Action Plans for the Contact and one open and one closed task](doc-assets/readme/AccountActionPlan-Detail.png) # Task notifications for Flow-created Action Plans @@ -262,7 +269,7 @@ If the user has enabled task notification, then those will be sent when an Actio # Queues -Action Plan Tasks cannot be assigned to queues, so if the parent record is owned by a queue, each AP Task will be assigned to the running user. Tasks generated from that Action Plan can be assigned to the queue by using a Flow to reassign the Tasks. Because the Invocable Apex returns a list of Action Plan Task IDs, the createdTasks (which have a relationship to the Action Plan tasks) can be updated in that same flow, as they are created synchronously and can be queried immediately. Alternatively, reassign Tasks to Queues any other way you'd like; it will not break Action Plans, and the Queue name will show on the Action Plan detail page. +Action Plan Tasks cannot be assigned to queues, so if the parent record is owned by a queue, each AP Task will be assigned to the running user. Tasks generated from that Action Plan can be assigned to the queue by using a Flow to reassign the Tasks. Because the Invocable Apex returns a list of Action Plan Task IDs, the created Tasks (which have a relationship to the Action Plan tasks) can be updated in that same flow, as they are created synchronously and can be queried immediately. Alternatively, reassign Tasks to Queues any other way you'd like; it will not break Action Plans, and the Queue name will show on the Action Plan detail page. # Automate Action Plan Creation @@ -271,7 +278,7 @@ Action Plan Tasks cannot be assigned to queues, so if the parent record is owned Action Plans includes an Invocable Apex class that can be included in a Flow. The Record ID of the triggering record is required, as is the Id OR the Name of the desired template. Days from trigger to start Action Plan is optional (and defaults to 0). The first task will be due the number of days (specified on the template) from the start date. This date may fall on a weekend, though task due dates can be moved to avoid weekends if set on the template. -![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/FlowAction.png) +![Flow action setup screen](doc-assets/readme/FlowAction.png) The Invocable Apex class returns the Salesforce IDs of all the created Action Plan Tasks, which can be used in the next Flow steps. @@ -280,12 +287,12 @@ The Invocable Apex class returns the Salesforce IDs of all the created Action Pl Run the following: ```plaintext -sfdx force:apex:execute -f ./data/sample-data.apex +sf apex run --file ./data/sample-data.apex ``` To use this Template with the included Flow, see the `Create Action Plan From Template` Apex Action in the `New Customer Onboarding Activities` Flow - ![Set input variables for the Flow action](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/FlowActionVariables.png) + ![Set input variables for the Flow action](doc-assets/readme/FlowActionVariables.png) Create an Account and set `Type` to any value that starts with 'Customer' @@ -295,7 +302,7 @@ It is recommended NOT to check the Recursion box when creating a Process Builder **It is also recommended NOT to use Process Builder at all!** - + ## Apex @@ -350,7 +357,7 @@ Action Plans supports the sharing and discovery of best practices using Template Export is simple. Navigate to the Template you wish to export. Click on the "Export" button. -![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/ActionPlanTemplate-import-1.png) +![](doc-assets/readme/ActionPlanTemplate-import-1.png) Export creates a simple XML file containing template header and task information. It also includes information about who created the template. Note: It does not include user information or sensitive data about what objects you might use this template with. @@ -363,8 +370,8 @@ Sharing the file is easy. Email the file to whomever you want to share it with. Import is also simple. Navigate to the "Import Template" tab. Select the file you want to import using "Browse" and once you've found it click on "Import Template." -![](sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images/ActionPlanTemplate-import-2.png) +![](doc-assets/readme/ActionPlanTemplate-import-2.png) ## (Optional) Sample Action Plan Template Import -This repository also includes sample Action Plan Template files, which you can import on the appropriate tab. You may download [New Customer Onboarding](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/data/Export%20-%20New%20Customer%20Onboarding.xml) or [Trade Show Follow Up](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/data/Trade%20Show%20Follow%20Up.xml) from GitHub, or you can find it in this SFDX project in the `data` folder. +This repository also includes sample Action Plan Template files, which you can import on the appropriate tab. You may download [New Customer Onboarding](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/data/Export%20-%20New%20Customer%20Onboarding.xml) or [Trade Show Follow Up](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/data/Trade%20Show%20Follow%20Up.xml) from GitHub, or you can find it in this SFDX project in the [`data`](https://github.com/SalesforceLabs/ActionPlansV4/blob/main/data) folder. diff --git a/apexdox.yml b/apexdox.yml index b05f35fb..1af1b726 100644 --- a/apexdox.yml +++ b/apexdox.yml @@ -1,9 +1,9 @@ engine: source: - path: '${workspaceFolder}/sfdx-source/LabsActionPlans/main/default/classes' - sourceUrl: https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes - - path: '${workspaceFolder}/sfdx-source/LabsActionPlans/main/default/tests' - sourceUrl: https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests + sourceUrl: https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes + - path: '${workspaceFolder}/sfdx-source/LabsActionPlans/main/default/classes/tests' + sourceUrl: https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests targetDirectory: '${workspaceFolder}/docs' #excludes: # - "*Test.cls" @@ -20,8 +20,9 @@ engine: #- webService - testMethod homePagePath: '${workspaceFolder}/doc-assets/readme.html' - #pages: - #- '${workspaceFolder}/doc-assets/Installation.html' + pages: + - '${workspaceFolder}/doc-assets/installation.html' + - '${workspaceFolder}/doc-assets/changelog.html' assets: - '${workspaceFolder}/doc-assets/logo.png' - '${workspaceFolder}/doc-assets/favicon.png' @@ -43,6 +44,7 @@ engine: - '${workspaceFolder}/doc-assets/highlight.css' - '${workspaceFolder}/doc-assets/highlight.js' - '${workspaceFolder}/doc-assets/index.js' + port: 8088 docblock: alignItems: true diff --git a/config/enterprise-scratch-def.json b/config/enterprise-scratch-def.json index c916da53..315bf31e 100644 --- a/config/enterprise-scratch-def.json +++ b/config/enterprise-scratch-def.json @@ -5,8 +5,14 @@ "description": "Enterprise Edition Scratch org for Action Plans", "features": ["EnableSetPasswordInApi"], "settings": { + "mobileSettings": { + "enableS1EncryptedStoragePref2": false + }, "lightningExperienceSettings": { "enableS1DesktopEnabled": true + }, + "chatterSettings": { + "enableChatter": true } } } diff --git a/config/install-scratch-def.json b/config/install-scratch-def.json index 7e4f324b..78fcce36 100644 --- a/config/install-scratch-def.json +++ b/config/install-scratch-def.json @@ -5,8 +5,14 @@ "description": "Developer Edition org requirements for Action Plans Installation", "features": ["EnableSetPasswordInApi"], "settings": { + "mobileSettings": { + "enableS1EncryptedStoragePref2": false + }, "lightningExperienceSettings": { "enableS1DesktopEnabled": true + }, + "chatterSettings": { + "enableChatter": true } } } diff --git a/config/professional-scratch-def.json b/config/professional-scratch-def.json index cc332460..ce5155d0 100644 --- a/config/professional-scratch-def.json +++ b/config/professional-scratch-def.json @@ -7,6 +7,9 @@ "settings": { "lightningExperienceSettings": { "enableS1DesktopEnabled": true + }, + "chatterSettings": { + "enableChatter": true } } } diff --git a/config/project-scratch-def.json b/config/project-scratch-def.json index 6b26facc..14034f10 100644 --- a/config/project-scratch-def.json +++ b/config/project-scratch-def.json @@ -3,13 +3,16 @@ "edition": "Developer", "hasSampleData": true, "description": "Developer Edition Scratch org for Action Plans", - "features": ["EnableSetPasswordInApi", "OrderSaveLogicEnabled"], + "features": ["EnableSetPasswordInApi"], "settings": { + "mobileSettings": { + "enableS1EncryptedStoragePref2": false + }, "lightningExperienceSettings": { "enableS1DesktopEnabled": true }, - "orderSettings": { - "enableOrders": true + "chatterSettings": { + "enableChatter": true } } } diff --git a/doc-assets/ApexDoxSetup.sh b/doc-assets/ApexDoxSetup.sh new file mode 100644 index 00000000..607671b1 --- /dev/null +++ b/doc-assets/ApexDoxSetup.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env sh + +printf '' > "doc-assets/readme.html" +echo >> "doc-assets/readme.html" +npx marked -i README.md --breaks >> "doc-assets/readme.html" + +sed -i '' 's|href="./|target="_blank" href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/|g' doc-assets/readme.html +sed -i '' 's|src="doc-assets/readme|class="readmeimage" src="assets|g' doc-assets/readme.html +sed -i '' 's|https://github.com/SalesforceLabs/ActionPlansV4/blob/main/INSTALLATION.md|./installation.html|g' doc-assets/readme.html +sed -i '' 's|https://github.com/SalesforceLabs/ActionPlansV4/blob/main/CHANGELOG.md|./changelog.html|g' doc-assets/readme.html + +printf '' > "doc-assets/installation.html" +echo >> "doc-assets/installation.html" +npx marked -i INSTALLATION.md --breaks >> "doc-assets/installation.html" + + +printf '' > "doc-assets/changelog.html" +echo >> "doc-assets/changelog.html" +npx marked -i CHANGELOG.md --breaks >> "doc-assets/changelog.html" + +. doc-assets/updateHighlight.sh \ No newline at end of file diff --git a/doc-assets/INSTALLATION.html b/doc-assets/INSTALLATION.html new file mode 100644 index 00000000..8fb976fe --- /dev/null +++ b/doc-assets/INSTALLATION.html @@ -0,0 +1,149 @@ + +
Follow these instructions to deploy Action Plans to your org.
+AppExchange: The managed package is the best way to go - it will let you upgrade seamlessly as features are added.
+Installing the App Using a Scratch Org: Fast and easy way to work with this app in a scratch org
+Installing the app using a Developer Edition Org or a Sandbox: Useful when tackling Trailhead Badges or if you want the app deployed to a more permanent environment than a scratch org.
+Optional installation instructions: Installing sample Action Plan Template and other metadata
+Action Plans: This is the best way to install the package, which you can easily upgrade as features are added.
+Set up your environment. Follow the steps in the Quick Start: Lightning Web Components Trailhead project. The steps include:
+If you haven't already done so, authorize your hub org and provide it with an alias (myhuborg in the command below):
+sf org login web --set-default --alias myhuborg
+
+Clone this repository:
+git clone https://github.com/SalesforceLabs/ActionPlansV4
+cd ActionPlansV4
+
+From the terminal window, run the installation script
+npm run scratchorg
+
+or
+. scripts/scratchorg.sh
+
+That's it!
+Follow this set of instructions if you want to deploy the app to a more permanent environment than a Scratch org.
This includes non source-tracked orgs such as a free Developer Edition Org or a Trailhead Playground, or your own Sandbox.
Start from a brand-new environment to avoid conflicts with previous work you may have done.
+Authorize your org and provide it with an alias (myorg in the command below):
+sf org login web --set-default --alias myorg
+
+Clone this repository:
+git clone https://github.com/SalesforceLabs/ActionPlansV4
+cd ActionPlansV4
+
+If you are setting up a Developer Edition: go to Setup, and under My Domain, register a My Domain. Then ensure that enhanced domains are activated. You may need to enable Salesforce Edge network first.
+To run all the next steps at once, run this command in the terminal:
+. scripts/unmanaged.sh
+
+The org will open. That's it!
+Or run these steps one by one
+Run this command to deploy the app.
+sf deploy metadata --source-dir sfdx-source/LabsActionPlans
+
+Assign the Action_Plans_Admin
permission set to the admin user.
sf org assign permset --name Action_Plans_Admin
+
+(Optional) Load sample metadata (see below)
+sf deploy metadata --source-dir sfdx-source/unmanaged
+
+If your org isn't already open, open it now:
+sf org open --target-org myorg
+
+In App Launcher, select the Action Plans app.
+This repository contains several files that are relevant if you want to add sample data, or integrate modern web development tooling to your Salesforce development processes or to your continuous integration/continuous deployment processes.
+This repository creates sample data (Accounts, Contacts, Leads) if you choose to create a scratch org. To prevent this, go to the scratch org definition and change hasSampleData
to false
.
"hasSampleData": false,
+
+To create a sample Action Plan Template for Account onboarding, run the following:
+sf apex run --file ./data/sample-data.apex
+
+To create
+ sf deploy metadata --source-dir sfdx-source/unmanaged
+
+You can also create other sample Account and Contact records by running the following command:
+sf data import tree --plan ./data/action-plan-data-plan.json
+
+When FIRST installing the package, it will automatically create a sample Action Plan Template for Account onboarding. If you want to recreate it manually, run the following:
+sf apex run --file ./data/sample-data-managed.apex
+
+To create
+sf deploy metadata --source-dir sfdx-source/unmanagedExtension
+
+You can also create other sample Account and Contact records by running the following command:
+sf data import tree --plan ./data/action-plan-data-plan.json
+
+Prettier is a code formatter used to ensure consistent formatting across your code base. To use Prettier with Visual Studio Code, install this extension from the Visual Studio Code Marketplace. The .prettierignore and .prettierrc files are provided as part of this repository to control the behavior of the Prettier formatter.
+Prettier Apex is an extension that handles Apex-specific formatting and allows the removal of the extra line via the Prettier config file. To use it with Visual Studio Code, follow these instructions from the Salesforce Extensions site.
+ + +This repository also comes with a package.json file that makes it easy to set up a pre-commit hook that enforces code formatting by running Prettier every time you git commit
changes.
To set up the formatting pre-commit hook:
+npm install
in your project's root folder to install the Husky and Prettier modules (Note: Mac users should verify that Xcode command line tools are installed before running this command.)Husky will now run Prettier automatically every time you commit changes, with some other updates if you installed the recommended extension ApexDox. You can also run the formatting from the command line using the following command (check out package.json for the full list):
+npm run prettier
+
+
diff --git a/doc-assets/README.html b/doc-assets/README.html
index 1dfc1c8e..5fd2fd26 100644
--- a/doc-assets/README.html
+++ b/doc-assets/README.html
@@ -1,16 +1,16 @@
Action Plans helps your organization encapsulate best practices into easily sharable, reusable task templates.
@@ -95,7 +95,7 @@Action Plans Template Creator:
Full permissions for Action Plan Templates and AP Template Tasks. No Action Plan access.Action Plans Creator:
Read, Create, Edit, Delete for Action Plans and AP Tasks. Read-only for Action Plan Templates and APT Task Templates.Action Plans Import/Export:
Access to export and import Action Plan Template records. View the appropriate button for export and tab for import.Action Plans User:
Read-only for Action Plans and AP Tasks.Action Plans User:
Read-only for Action Plans and AP Tasks. Edit permission for Tasks should be provided via the user's profile or other permission sets.Uses for each Permission Set:
Note: The Apex used in Flows or via triggers does not require special permissions to run.
Related Objects
fieldset on Action Plan.before delete
and after undelete
contexts (removing the LabsActionPlans
namespace if you're not using the managed package:LabsActionPlans.ActionPlansTriggerHandlers.actionPlansSObjectTriggerHandler( 'Custom_Object__c' );
+- Add the following code to the object trigger in
before delete
and after undelete
contexts (removing the LabsActionPlans
namespace if you're not using the managed package):LabsActionPlans.ActionPlansTriggerHandlers.actionPlansSObjectTriggerHandler( 'CustomObject__c' );
-
+
Don't forget to write a test class to cover the custom object trigger. If you're just going for coverage (not a best-practice!) just make a test method inserting and then deleting a record.
Unfortunately, the code in this package does not lend itself to easy creation of an Action Plan for a custom object... yet.
Create Custom Object Action Plan
button to the Action Plan objectWhile Action Plans already overrides the New Action Plan action, the New button will show a new Action Plan screen, but will not allow adding an existing template. (Perhaps this will be in a future release... safe harbor.) Create a custom button with the following format on the Action Plan object and add it to the related list on the custom object page layout:
LabsActionPlans
namespace if you're not using the managed package):{!URLFOR( $Action.LabsActionPlans__ActionPlan__c.New, null, [refType="CustomObject__c", refId=CustomObject__c.Id] )}
+- Use the following format for the button (removing the
LabsActionPlans__
namespace if you're not using the managed package):{!URLFOR( $Action.LabsActionPlans__ActionPlan__c.New, null, [refType="CustomObject__c", refId=CustomObject__c.Id] )}
+- Be sure to remove the standard New button on the Action Plans related list and use this button instead.
Create Action Plans
for multiple Custom Object recordsJust as there is a button for Account list views to create multiple Action Plans, you can do the same for your custom object. Create a Visualforce page with the following code:
<apex:page standardController="CustomObject__c" recordsetvar="o"
extensions="LabsActionPlans.ActionPlansCreateMultipleAPsExtension"
@@ -203,19 +207,19 @@ Task Record Types
Create Action Plans for Several Accounts
Navigate to an Accounts list view. Select the Accounts for which you want to create Action Plans. Click on the "Create Account Action Plans" button.
-
+
-Select the template you want to use by typing the name on the lookup and clicking on it.
+Select the template you want to use by typing the name on the lookup and clicking on it.
-Enter the information specific to this plan. Note that the Accounts you selected earlier are visible.
+Enter the information specific to this plan. Note that the Accounts you selected earlier are visible.
Save the Action Plan.
Note: Action Plan creation is handled by a queueable (asynchronous) process. It can take a couple of minutes to be able to view all created records.
-
+
Verify the Action Plan and the tasks.
-Complete the first task on the Action Plan.
Note that the Action Plan is now in the correct related list and that this Account has one open activity and one closed activity. The third activity in the template is dependent and will be created only when its controlling task is complete.
-
+Complete the first task on the Action Plan.
Note that the Action Plan is now in the correct related list and that this Account has one open activity and one closed activity. The third activity in the template is dependent and will be created only when its controlling task is complete. (A Contact related list is shown here, but this applies equally to Accounts.)
+
Task notifications for Flow-created Action Plans
@@ -230,15 +234,15 @@ Action Plan Tasks
If the box is checked, assuming that notifications are enabled for that user, the email will be sent.
Queues
-Action Plan Tasks cannot be assigned to queues, so if the parent record is owned by a queue, each AP Task will be assigned to the running user. Tasks generated from that Action Plan can be assigned to the queue by using a Flow to reassign the Tasks. Because the Invocable Apex returns a list of Action Plan Task IDs, the createdTasks (which have a relationship to the Action Plan tasks) can be updated in that same flow, as they are created synchronously and can be queried immediately. Alternatively, reassign Tasks to Queues any other way you'd like; it will not break Action Plans, and the Queue name will show on the Action Plan detail page.
+Action Plan Tasks cannot be assigned to queues, so if the parent record is owned by a queue, each AP Task will be assigned to the running user. Tasks generated from that Action Plan can be assigned to the queue by using a Flow to reassign the Tasks. Because the Invocable Apex returns a list of Action Plan Task IDs, the created Tasks (which have a relationship to the Action Plan tasks) can be updated in that same flow, as they are created synchronously and can be queried immediately. Alternatively, reassign Tasks to Queues any other way you'd like; it will not break Action Plans, and the Queue name will show on the Action Plan detail page.
Automate Action Plan Creation
Flow
Action Plans includes an Invocable Apex class that can be included in a Flow. The Record ID of the triggering record is required, as is the Id OR the Name of the desired template.
Days from trigger to start Action Plan is optional (and defaults to 0). The first task will be due the number of days (specified on the template) from the start date. This date may fall on a weekend, though task due dates can be moved to avoid weekends if set on the template.
-
+
The Invocable Apex class returns the Salesforce IDs of all the created Action Plan Tasks, which can be used in the next Flow steps.
(Optional) Sample Action Plan Template for Account onboarding
Run the following:
-sfdx force:apex:execute -f ./data/sample-data.apex
+sf apex run --file ./data/sample-data.apex
To use this Template with the included Flow, see the Create Action Plan From Template
Apex Action in the New Customer Onboarding Activities
Flow
@@ -246,7 +250,7 @@ (Optional)
Process Builder
It is recommended NOT to check the Recursion box when creating a Process Builder to work with Action Plans.
It is also recommended NOT to use Process Builder at all!
-
+
Apex
To call the invocable Apex from a Trigger or Apex class, adapt the following sample code:
@@ -302,5 +306,5 @@ Best Practices: How to Import
Import is also simple. Navigate to the "Import Template" tab. Select the file you want to import using "Browse" and once you've found it click on "Import Template."
(Optional) Sample Action Plan Template Import
-This repository also includes sample Action Plan Template files, which you can import on the appropriate tab. You may download New Customer Onboarding or Trade Show Follow Up from GitHub, or you can find it in this SFDX project in the data
folder.
+This repository also includes sample Action Plan Template files, which you can import on the appropriate tab. You may download New Customer Onboarding or Trade Show Follow Up from GitHub, or you can find it in this SFDX project in the data
folder.
diff --git a/doc-assets/README.md b/doc-assets/README.md
index 555c6f13..f0cd2a24 100644
--- a/doc-assets/README.md
+++ b/doc-assets/README.md
@@ -1 +1,24 @@
-This directory contains files for generating the ApexDox documentation
+
+
+# ApexDox Documentation Instructions
+
+Updating ApexDox happens in three parts.
+
+1. Run ApexDoxSetup.sh
+ ```
+ . doc-assets/ApexDoxSetup.sh
+ ```
+
+1. Run ApexDox
+ ```
+ SHIFT + COMMAND + P, select ApexDox: Run
+ ```
+
+1. Run ApexDox cleanup
+ ```
+ npm run prettier:docs
+ ```
+
+# Changelog Instructions
+
+
diff --git a/doc-assets/changelog.html b/doc-assets/changelog.html
new file mode 100644
index 00000000..b52f8f2a
--- /dev/null
+++ b/doc-assets/changelog.html
@@ -0,0 +1,185 @@
+
+Changelog
+All notable changes to this project will be documented in this file.
+The format is based on Keep a Changelog
and this project adheres to Semantic Versioning.
+Unreleased
+Merged
+
+- build(deps-dev): bump lint-staged from 13.1.2 to 13.2.0
#7
+- build(deps-dev): bump eslint from 8.35.0 to 8.36.0
#6
+- build(deps-dev): bump eslint from 8.34.0 to 8.35.0
#4
+- feat(tests): update tests (assertions, messages)
#3
+- feat: update API to 57.0
#1
+- Bump github/codeql-action from 1 to 2
#59
+- Fix assigned to field
#60
+- Archived flag, dependent task fixes, SOQL optimization
#58
+- Cosmetic rearrangements, apexdoc
#55
+- 4.3.0 Queues, Child Objects
#53
+- Version 4.3.0 pt 2
#47
+- Version 4.3.0
#44
+- Codecov to v3
#41
+
+Commits
+
+- build(npm): update package dependencies
e40b10a
+- lightning lookup w/o API v1
e8dac8e
+- docs(ApexDox): rerun ApexDox
bc720e2
+- docs(ApexDox): include Installation & Changelog
4910af9
+- feat(docs): ApexDox version upgrade
178e1ce
+- build: move tests folder into classes
99d78d5
+- Tests use Assert class
59d6ef2
+- build(sfdx): change sfdx to sf commands
994b3f2
+- revert(API): use 56.0 to avoid GVS bug
6eb588a
+- feat: finish Professional Edition template lookup
415fdcf
+- docs: update CanTheUser comments
22ea89c
+- API 56.0
4303659
+- fix: page redirect on template from object
70f43ba
+- feat(sfdx): update sfdx to sf
f360666
+- fix: remove unnecessary jsencode
96070b1
+- fix: redirect on template choice for records
8bf011b
+- Deploy rules & scripts
5b80488
+- APTemplate lookup actions
d34eaaf
+- fix(docs): update ApexDox
e8481e8
+- ci(codeQL): delete codeQL d/t IP address
fa066cf
+- dependabot auto-merge
b5e5d4f
+- docs: cleanup code, document variables
f27e8dc
+- feat: Update tests to use Assert class
2069b97
+- fix(build): Update plugin dependencies
4bf530c
+- Update scratch org definition files
851171c
+- chore: Scratch org shape updates
fbe390e
+- docs(Apex): test comments
5056ebc
+- ci: update PR sfdx to sf, npm installation
77fa739
+- build(changelog): instructions & tag prefix
0ae955b
+- Beta 4.3.0-9
d4b477c
+- fix(sfdx): sf apex test correct config
6a030e4
+- feat: sfdx-scanner config
42c6889
+- docs(README): add image descriptions
2b9f999
+- Dependabot alerts
dea7b92
+- Bug Report Template
acfda0a
+- Bug template
516f70c
+- build(pmd): remove updatepmd
0ef9783
+- feat(scripts): update latest jQuery
992988e
+- fix(lookup): escape=false for record name
5fae8c0
+- Changelog
6516aa9
+
+4.2.1 - 2022-05-25
+Merged
+
+Fixed
+
+Commits
+
+- Correct Apex global method syntax
eaee330
+- ApexDox update
da133ff
+- Promote v2.4.0.7
70849b9
+- Changelog, packaging workflow
5b77ddb
+- Packaging workflow
9107fd9
+
+4.2.0 - 2022-04-01
+Merged
+
+- Specify Action Plan Name in Invocable Apex
#27
+- Prettier, JS fixing
#26
+- Highlight.js to 11.5
#25
+- Add changelog
#24
+- Bump minimist from 1.2.5 to 1.2.6
#23
+- Upgrading Instructions
#22
+- Add Codecov
#21
+
+Commits
+
+- ApexDox remove unused modifiers
3b321db
+- Create codeql-analysis.yml
2822bc5
+- Highlight inline code security update
57662e7
+- Pull Request workflow update
2c84f4d
+- Update and rename CONTRIBUTION.md to CONTRIBUTING.md
cb7f3c1
+- update Prettierignore
37aeafa
+- Add link to Apex documentation
96f9cde
+- Sample template update
4c957ca
+- Update CONTRIBUTING.md
9e3b175
+- Add AppExchange listing to README
760dfc9
+- Sample flow update
397b763
+
+4.1.0 - 2022-03-17
+Merged
+
+- Release Ready
#19
+- Pre-Release (beta15)
#18
+- Pre-Commit ApexDox cleanup
#16
+- Scripts, Cleanup, New Build
#15
+
+Commits
+
+- Update issue templates
e2be869
+- Import file language
5be81e1
+- Start package versioning via release
afd008a
+- ISV toolkit md exclusion
022c65a
+- AppExchange link
31f2e02
+- Apex highlighting
0609b37
+
+4.0.0-9 - 2022-02-23
+Merged
+
+- AP Task AssignedTo field cleanup
#14
+- Managed vs Unmanaged Project Config
#13
+- Permissions Updates
#12
+- Remove tests from ApexDox
#10
+- Security, code coverage, Print page, Spring 22!
#7
+- Code and documentation cleanup
#6
+- PMD-suggested cleanup
#5
+- Rename Template Task
#4
+- Version 4.0.0.7
#3
+- Code comment cleanup
#2
+- ApexDocs, Project Files, PMD rules
#1
+
+Commits
+
+- Documentation with ApexDox
236c66b
+- Iniital commit, updated for namespace
f4d7498
+- migrate to new sfdx-falcon directory
0cde1dc
+- move to sfdx-source falcon directory structure
2edf46d
+- package files
16c26fc
+- Prettier first pass
9467195
+- ApexDox
1fc534b
+- ApexDox
48589f7
+- First commit - ReadMe & Installation
406674a
+- package files
45278ca
+- Install/update prettier
62fd10a
+- Exclude unmanaged and unpackaged metadata
32bcb00
+- Unmanaged metadata for managed installation
ed24492
+- Remove non-dev org actions
29208d8
+- Install script for custom setting
11e6b5d
+- Update for EE orgs
83e459d
+- Fix lookup for portal users, custom setting DML
dc6ea13
+- Support unmanaged metadata
f8681e8
+- Add gitignore
433c579
+- Documentation and support files
9993d83
+- ApexDox
c5c3144
+- Simplify Account layout
536459a
+- ApexDox
2662ae8
+- Create first package version
53b252f
+- Org metadata and ignore files
0725de0
+- Removed TradeStyle to allow installation in regular orgs
fa17e9d
+- Handle ID lists
b07c6a7
+- Works in managed package with unmanaged objects
ef595b4
+- Simplify installation instructions
bdb2de3
+- Readme update, ignore record types
1412184
+- Fix fieldset test visibility bug
644087e
+- Class and method accessibility
7515c2a
+- Remove debugs
07e4ee7
+- Release version 4.0.0-6
3f7a3fa
+- Script for working with custom object invocable
9fe7c54
+- Create custom setting on install
c3f795c
+- New task layout
c31ec9f
+- Unprotect custom metadata so users can edit
f947d4b
+- Beta 3
19ace7e
+- ApexDox
0076c54
+
+
diff --git a/doc-assets/highlight.js b/doc-assets/highlight.js
index 9491f128..c65744b2 100644
--- a/doc-assets/highlight.js
+++ b/doc-assets/highlight.js
@@ -1,5 +1,5 @@
/*!
- Highlight.js v11.6.0 (git: bed790f3f3)
+ Highlight.js v11.7.0 (git: 82688fad18)
(c) 2006-2022 undefined and other contributors
License: BSD-3-Clause
*/
@@ -299,7 +299,7 @@ e["before:highlightBlock"](Object.assign({block:n.el},n))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{
e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}
}),n.debugMode=()=>{s=!1},n.safeMode=()=>{s=!0
-},n.versionString="11.6.0",n.regex={concat:m,lookahead:g,either:p,optional:b,
+},n.versionString="11.7.0",n.regex={concat:m,lookahead:g,either:p,optional:b,
anyNumberOfTimes:u};for(const n in T)"object"==typeof T[n]&&e.exports(T[n])
;return Object.assign(n,T),n})({});const te=e=>({IMPORTANT:{scope:"meta",
begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{
@@ -326,8 +326,9 @@ end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
const t=e[0].length+e.index,a=e.input[t]
;if("<"===a||","===a)return void n.ignoreMatch();let i
;">"===a&&(((e,{after:n})=>{const t=""+e[0].slice(1)
-;return-1!==e.input.indexOf(t,n)})(e,{after:t
-})||n.ignoreMatch()),(i=e.input.substring(t).match(/^\s+extends\s+/))&&0===i.index&&n.ignoreMatch()
+;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch())
+;const r=e.input.substring(t)
+;((i=r.match(/^\s*=/))||(i=r.match(/^\s+extends\s+/))&&0===i.index)&&n.ignoreMatch()
}},i={$pattern:be,keyword:me,literal:pe,built_in:ye,"variable.language":Ee
},r="\\.([0-9](_?[0-9])*)",s="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",o={
className:"number",variants:[{
@@ -348,9 +349,9 @@ begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)",
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]
-},b=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,o];l.contains=b.concat({
-begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(b)})
-;const m=[].concat(u,l.contains),p=m.concat([{begin:/\(/,end:/\)/,keywords:i,
+},b=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,{match:/\$\d+/},o]
+;l.contains=b.concat({begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(b)
+});const m=[].concat(u,l.contains),p=m.concat([{begin:/\(/,end:/\)/,keywords:i,
contains:["self"].concat(m)}]),_={className:"params",begin:/\(/,end:/\)/,
excludeBegin:!0,excludeEnd:!0,keywords:i,contains:p},h={variants:[{
match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")],
@@ -361,7 +362,7 @@ className:"title.class",keywords:{_:[..._e,...he]}},E={variants:[{
match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[_],
illegal:/%/},y={
-match:n.concat(/\b/,(w=[...fe,"super"],n.concat("(?!",w.join("|"),")")),t,n.lookahead(/\(/)),
+match:n.concat(/\b/,(w=[...fe,"super","import"],n.concat("(?!",w.join("|"),")")),t,n.lookahead(/\(/)),
className:"title.function",relevance:0};var w;const N={
begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},v={
@@ -375,8 +376,8 @@ PARAMS_CONTAINS:p,CLASS_REFERENCE:f},illegal:/#(?![$_A-z])/,
contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
label:"use_strict",className:"meta",relevance:10,
begin:/^\s*['"]use (strict|asm)['"]/
-},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,u,o,f,{className:"attr",
-begin:t+n.lookahead(":"),relevance:0},k,{
+},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,u,{match:/\$\d+/},o,f,{
+className:"attr",begin:t+n.lookahead(":"),relevance:0},k,{
begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
keywords:"return throw case",relevance:0,contains:[u,e.REGEXP_MODE,{
className:"function",begin:O,returnBegin:!0,end:"\\s*=>",contains:[{
@@ -402,7 +403,7 @@ begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/,
-contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$\(\(/,
+contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/,
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
@@ -602,7 +603,7 @@ contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{
begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)),
className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{
const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+ue("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={
-keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],
+keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"],
literal:["false","true","null"],
type:["char","boolean","long","float","int","byte","short","double"],
built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{
@@ -759,9 +760,9 @@ begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[],
-variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},i={
-className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{
-begin:/_(?!_)/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[]
+variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]
+},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{
+begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[]
}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r)
;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o)
})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
@@ -957,19 +958,20 @@ match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{
match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`",
contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{
const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={
-"variable.constant":["__FILE__","__LINE__"],
+"variable.constant":["__FILE__","__LINE__","__ENCODING__"],
"variable.language":["self","super"],
-keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],
-built_in:["proc","lambda"],literal:["true","false","nil"]},s={
-className:"doctag",begin:"@[A-Za-z]+"},o={begin:"#<",end:">"
-},l=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^=begin","^=end",{
-contains:[s],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={
-className:"subst",begin:/#\{/,end:/\}/,keywords:r},d={className:"string",
-contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
-},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,
-end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{
-begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,
-end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
+keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],
+built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],
+literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={
+begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s]
+}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10
+}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/,
+end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c],
+variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{
+begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{
+begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{begin:/%[qQwWx]?\//,
+end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{
+begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
@@ -984,9 +986,11 @@ begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{
className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,
keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{
-match:[/class\s+/,i]}],scope:{2:"title.class",4:"title.class.inherited"},
-keywords:r},{relevance:0,match:[i,/\.new[ (]/],scope:{1:"title.class"}},{
-relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{
+match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",
+4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{
+2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{
+1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{
match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{
begin:e.IDENT_RE+"::"},{className:"symbol",
begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
diff --git a/doc-assets/onReadMeChange.sh b/doc-assets/onReadMeChange.sh
deleted file mode 100644
index 9c3cb52f..00000000
--- a/doc-assets/onReadMeChange.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env sh
-
-printf '' > "doc-assets/README.html"
-echo >> "doc-assets/README.html"
-npx marked -i README.md --breaks >> "doc-assets/README.html"
-
-sed -i '' 's|href="./|target="_blank" href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/|g' doc-assets/README.html
-
-sed -i '' 's|src="sfdx-source/LabsActionPlans/main/default/staticresources/ActionPlan_Resources/about_images|class="readmeimage" src="assets|g' doc-assets/README.html
\ No newline at end of file
diff --git a/scripts/updateHighlight.sh b/doc-assets/updateHighlight.sh
similarity index 100%
rename from scripts/updateHighlight.sh
rename to doc-assets/updateHighlight.sh
diff --git a/docs/ActionPlanCreateInvocable.html b/docs/ActionPlanCreateInvocable.html
index c2a5f839..616545e2 100644
--- a/docs/ActionPlanCreateInvocable.html
+++ b/docs/ActionPlanCreateInvocable.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L21">
ActionPlanCreateInvocable
@@ -342,7 +342,14 @@
Signature
global without sharing class ActionPlanCreateInvocable
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanCreateInvocable Methods
@@ -361,7 +368,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L42">
makeActionPlanFromTemplate(requests)
@@ -409,7 +416,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L333">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L328">
ActionPlanCreateInvocable.CreateActionPlanRequest
@@ -418,7 +425,14 @@
Signature
global class CreateActionPlanRequest
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanCreateInvocable.CreateActionPlanRequest Properties
@@ -436,7 +450,7 @@ ActionPlanCreateInvocable.CreateActionPl
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L356">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L351">
actionPlanName
@@ -453,7 +467,7 @@ ActionPlanCreateInvocable.CreateActionPl
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L344">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L339">
daysToActionPlanStart
@@ -470,7 +484,7 @@ ActionPlanCreateInvocable.CreateActionPl
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L338">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L333">
relatedRecordID
@@ -487,7 +501,7 @@ ActionPlanCreateInvocable.CreateActionPl
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L350">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreateInvocable.cls#L345">
templateNameOrID
diff --git a/docs/ActionPlanCreateInvocableTest.html b/docs/ActionPlanCreateInvocableTest.html
index 371c315d..04513a70 100644
--- a/docs/ActionPlanCreateInvocableTest.html
+++ b/docs/ActionPlanCreateInvocableTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L25">
ActionPlanCreateInvocableTest
@@ -347,7 +347,15 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlanCreateInvocableTest Properties
@@ -363,7 +371,7 @@ ActionPlanCreateInvocableTest Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L27">
BULK_COUNT
@@ -378,7 +386,7 @@ ActionPlanCreateInvocableTest Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L26">
TASK_COUNT
@@ -442,7 +450,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L327">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L329">
bogusTemplateName()
@@ -457,7 +465,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L225">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L227">
bulkAccounts()
@@ -472,7 +480,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L259">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L261">
checkWeekendDueDate()
@@ -487,7 +495,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L28">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L30">
relatedAccount()
@@ -502,7 +510,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L159">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L161">
relatedCampaign()
@@ -517,7 +525,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L181">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L183">
relatedCase()
@@ -532,7 +540,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L70">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L72">
relatedContact()
@@ -547,7 +555,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L203">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L205">
relatedContract()
@@ -562,7 +570,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L112">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L114">
relatedLead()
@@ -577,7 +585,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L137">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L139">
relatedOpportunity()
@@ -592,7 +600,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L377">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L379">
setupRequest(templateId, relatedID, daysToActionPlanStart)
@@ -628,7 +636,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreateInvocableTest.cls#L395">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreateInvocableTest.cls#L397">
setupRequest(templateId, relatedID, daysToActionPlanStart, actionPlanName)
diff --git a/docs/ActionPlanCreationController.html b/docs/ActionPlanCreationController.html
index 284c2377..2a6f3fc5 100644
--- a/docs/ActionPlanCreationController.html
+++ b/docs/ActionPlanCreationController.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L25">
ActionPlanCreationController
@@ -347,8 +347,15 @@
-
Rodrigo Birriel
- David Schach
2022
+ Authors
+
+ Rodrigo Birriel,
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanCreationController Properties
@@ -366,7 +373,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L34">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L34">
actionPlan
@@ -386,7 +393,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L107">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L108">
addedTask
@@ -406,7 +413,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L88">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L89">
apTasks
@@ -426,7 +433,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L73">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L74">
canDisplayReminder
@@ -444,7 +451,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L97">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L98">
cloneParam
@@ -462,7 +469,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L69">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L70">
errorMsg
@@ -480,7 +487,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L51">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L52">
hasRelated
@@ -498,7 +505,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L55">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L56">
hasRelatedObject
@@ -516,7 +523,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L102">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L103">
inVisualforceContext
@@ -536,7 +543,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L78">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L79">
mapTasksListBkp
@@ -554,7 +561,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L92">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L93">
pendingDeletes
@@ -572,7 +579,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L423">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L439">
refId
@@ -590,7 +597,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L436">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L452">
refType
@@ -608,7 +615,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L348">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L364">
relatedFieldName
@@ -626,7 +633,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L64">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L65">
relatedObjDisplayField
@@ -644,7 +651,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L60">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L61">
relatedObjectName
@@ -664,7 +671,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1250">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1293">
relatedObjectOptions
@@ -682,7 +689,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L46">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L47">
relatedObjLabelPlural
@@ -700,7 +707,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1092">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1135">
relatedObjNameList
@@ -723,7 +730,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L42">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L43">
relatedRecordIDs
@@ -741,7 +748,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1129">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1172">
relatedRecordsOne
@@ -759,7 +766,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1137">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1180">
relatedRecordsThree
@@ -777,7 +784,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1133">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1176">
relatedRecordsTwo
@@ -795,7 +802,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L376">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L392">
relationshipFields
@@ -813,7 +820,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L82">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L83">
subtitle
@@ -831,7 +838,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L332">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L349">
taskHasRecordType
@@ -849,7 +856,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L29">
taskIndex
@@ -867,7 +874,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L260">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L273">
taskOwnerMap
@@ -885,7 +892,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1380">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1423">
taskPriorities
@@ -903,7 +910,7 @@ ActionPlanCreationController Properties<
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1363">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1406">
taskTypes
@@ -914,23 +921,26 @@ ActionPlanCreationController Properties<
Picklist of Task.Type
values
-
+
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L39">
templateId
- private Id templateId
+ public Id templateId
- TemplateId is pulled from the page parameters and tells us if we're making an Action Plan based on a template
+
+ TemplateId is pulled from the page parameters and tells us if we're making an Action Plan based on a template
It can also be set by choosing a
+ template when applying a template to one or more records
+
@@ -951,7 +961,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L115">
ActionPlanCreationController(stdController)
@@ -1002,6 +1012,11 @@ ActionPlanCreationController Methods
Checks if Action Plan Tasks has cyclic dependency.
+
+ checkHasRelated ()
+
+ Check all relationship fields and return true if at least one is filled
+
checkPendingDeletes ()
@@ -1154,6 +1169,13 @@ ActionPlanCreationController Methods
Query all Task
records for the Action Plan's Tasks so we can display the owher name read-only if it is a queue
+
+ queryRecord (recordId)
+
+
+ Main code for lightning lookup record selection. Included in this class because we use this as the controller for our main page
+
+
referedObjectInit ()
@@ -1218,6 +1240,13 @@ ActionPlanCreationController Methods
Saves Action Plan Instance and task. Also creates all due dates for tasks, then redirects to the AP list
+
+ searchTemplates (searchText)
+
+
+ Main code for lightning lookup search. Included in this class because we use this as the controller for our main page
+
+
@@ -1226,7 +1255,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L731">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L782">
addTask()
@@ -1250,7 +1279,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1266">
calculateMaxTaskIndex()
@@ -1268,7 +1297,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1280">
calculateMaxTemplateTaskIndex()
@@ -1286,7 +1315,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L683">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L734">
cancel()
@@ -1304,7 +1333,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1143">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1186">
checkCycleDependent()
@@ -1315,6 +1344,24 @@
Returns
Boolean
True if there is a cyclic dependency
+
+
+
+ checkHasRelated()
+
+
+ Check all relationship fields and return true if at least one is filled
+ Signature
+
+ private Boolean checkHasRelated()
+ Returns
+ Boolean
Is at least one lookup to a parent record populated?
+
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L488">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L504">
checkPendingDeletes()
@@ -1338,7 +1385,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L396">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L412">
chooseDisplayField(objectName)
@@ -1364,7 +1411,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1175">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1218">
dependantCycle(controllingTask, index)
@@ -1389,7 +1436,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1345">
findActivityEnabledObjects()
@@ -1407,7 +1454,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L399">
getAllRelationshipFields()
@@ -1435,7 +1482,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L840">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L881">
getAPTasks()
@@ -1453,7 +1500,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1373">
getDefaultTaskRecordTypeId()
@@ -1481,7 +1528,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1013">
getDisplayTemplateLookup()
@@ -1499,7 +1546,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1214">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1257">
getErrorMsg()
@@ -1517,7 +1564,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1399">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1442">
getHoursOption()
@@ -1539,7 +1586,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1122">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1165">
getNameListSize()
@@ -1561,7 +1608,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1409">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1452">
getNamespacePrefix()
@@ -1587,7 +1634,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1339">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1382">
getRecordTypeName()
@@ -1609,7 +1656,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1299">
getRelatedObjectOptions()
@@ -1633,7 +1680,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L980">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1021">
getSubjectItems()
@@ -1651,7 +1698,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1387">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1430">
getTaskPriorities()
@@ -1679,7 +1726,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1399">
getTaskRTPicklistValues()
@@ -1709,7 +1756,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L812">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L863">
getTasks()
@@ -1727,7 +1774,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1370">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1413">
getTaskTypes()
@@ -1753,7 +1800,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L321">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L338">
getTemplateName()
@@ -1781,7 +1828,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L471">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L487">
hasRelatedObject()
@@ -1805,7 +1852,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L164">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L165">
initCloneActionPlan()
@@ -1821,7 +1868,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L154">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L155">
initEditActionPlan()
@@ -1837,7 +1884,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L243">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L256">
initNewActionPlan()
@@ -1853,7 +1900,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L201">
initNewActionPlanFromTemplate(visualforceContext)
@@ -1879,7 +1926,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L211">
initNewActionPlanFromTemplate(visualforceContext, apt)
@@ -1906,7 +1953,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L415">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L431">
onLoad()
@@ -1928,7 +1975,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1025">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1066">
parseRelatedIDs(relatedIDs)
@@ -1954,7 +2001,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L268">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L281">
queryAPTaskOwners(ap)
@@ -1973,6 +2020,38 @@
Author
David Schach
+
+
+
+ queryRecord(recordId)
+
+
+
+ Main code for lightning lookup record selection. Included in this class because we use this as the controller for our main page
+
+ Signature
+ @RemoteAction
+ public static List<SObject> queryRecord(String recordId)
+ Parameters
+ recordId
+ Type: String
+ Single record ID for chosen Action Plan Template
+ Returns
+ List<SObject>
Returned records
+ See
+
+ ActionPlanSectionHeaderController
+
+ Since
+
+ 2023-02
+
+
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1001">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1042">
referedObjectInit()
@@ -2002,7 +2081,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1361">
refreshRelatedObjectsLookUp()
@@ -2026,7 +2105,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L454">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L470">
relatedObjectId()
@@ -2044,7 +2123,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L765">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L816">
removeTask()
@@ -2062,7 +2141,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1089">
retrieveNameRelatedRecord(relatedRecordIDs, relatedObjectName)
@@ -2087,7 +2166,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L973">
retrieveTaskFromExistingActionPlan(actionPlanId)
@@ -2109,7 +2188,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L509">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L543">
save()
@@ -2136,7 +2215,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L573">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L620">
saveAndNew()
@@ -2154,7 +2233,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L630">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L681">
saveHandler()
@@ -2183,7 +2262,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L590">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L641">
saveMultipleAP()
@@ -2209,7 +2288,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L652">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L703">
savePageRef()
@@ -2233,7 +2312,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L529">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L580">
saveSingleAP()
@@ -2244,6 +2323,36 @@
Returns
Id
Action Plan Id
+
+
+
+ searchTemplates(searchText)
+
+
+ Main code for lightning lookup search. Included in this class because we use this as the controller for our main page
+ Signature
+ @RemoteAction
+ public static List<SObject> searchTemplates(String searchText)
+ Parameters
+ searchText
+ Type: String
+ Search string (escaped!) to get matching AP Templates
+ Returns
+ List<SObject>
Returned records
+ See
+
+ ActionPlanSectionHeaderController
+
+ Since
+
+ 2023-02
+
+
@@ -2255,17 +2364,34 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1420">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1502">
ActionPlanCreationController.ApTaskWrapper
- Wrapper Class for AP Task SObject
+
+ Wrapper Class for AP Task SObject
Note: I don't like the way we decide to show the User field - especially if we want to assign to a Queue. This part
+ should be refactored next, probably with a User/Queue picklist depending on org settings
+
Signature
public class ApTaskWrapper
-
Rodrigo Birriel
- David Schach
08/01/2010 4/2022
+ Author
+
+ Rodrigo Birriel
+
+ Since
+
+ 08/01/2010
+
+ Author
+
+ David Schach
+
+ Since
+
+ 2022-04
+
ActionPlanCreationController.ApTaskWrapper Properties
@@ -2283,7 +2409,7 @@ ActionPlanCreationController.ApTaskWrapp
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1424">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1506">
ap
@@ -2300,7 +2426,7 @@ ActionPlanCreationController.ApTaskWrapp
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1429">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1511">
apt
@@ -2317,7 +2443,7 @@ ActionPlanCreationController.ApTaskWrapp
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1445">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1527">
assignToOwner
@@ -2327,6 +2453,23 @@ ActionPlanCreationController.ApTaskWrapp
Does blank User field default to parent owner?
Filled from custom setting
+
+
+
+ canEditUserField
+
+
+
+ private Boolean canEditUserField
+
+
+ Because it uses a describe call, check user permission once, in constructor
+
ActionPlanCreationController.ApTaskWrapp
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1439">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1521">
isLast
@@ -2344,6 +2487,40 @@ ActionPlanCreationController.ApTaskWrapp
Last Task
+
+
+
+ pageHasRelatedIds
+
+
+
+ private Boolean pageHasRelatedIds
+
+
+ Store if page has relatedIDs once; set in constructor
+
+
+
+
+ pageTemplateId
+
+
+
+ private String pageTemplateId
+
+
+ Store page template ID once, in constructor
+
ActionPlanCreationController.ApTaskWrapp
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1434">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1516">
position
@@ -2368,7 +2545,7 @@ ActionPlanCreationController.ApTaskWrapp
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1484">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1582">
userRequired
@@ -2400,7 +2577,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1548">
ApTaskWrapper(ap, apTask, position, apTaskRTId)
@@ -2446,7 +2623,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L1598">
getUserRender()
@@ -2475,7 +2652,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L292">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L309">
ActionPlanCreationController.OwnerWrapper
@@ -2501,7 +2678,7 @@ ActionPlanCreationController.OwnerWrappe
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L312">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L329">
tOwnerId
@@ -2518,7 +2695,7 @@ ActionPlanCreationController.OwnerWrappe
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L307">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L324">
tOwnerName
@@ -2547,7 +2724,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanCreationController.cls#L316">
OwnerWrapper(taskOwnerId, taskOwnerName)
diff --git a/docs/ActionPlanCreationControllerTest.html b/docs/ActionPlanCreationControllerTest.html
index ccb525a4..f346f257 100644
--- a/docs/ActionPlanCreationControllerTest.html
+++ b/docs/ActionPlanCreationControllerTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L24">
ActionPlanCreationControllerTest
@@ -347,7 +347,15 @@
-
David Schach
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlanCreationControllerTest Methods
@@ -356,6 +364,9 @@ ActionPlanCreationControllerTest Methods
actionPlanSave ()
+
+ actionPlanSaveAndMakeDependent ()
+
actionPlanSaveAndNew ()
@@ -403,6 +414,8 @@ ActionPlanCreationControllerTest Methods
makeData ()
+
+ Set up test data
newAPWithoutTasks ()
@@ -413,6 +426,9 @@ ActionPlanCreationControllerTest Methods
removeActionPlanTask ()
+
+ saveAndDelete ()
+
saveAndView ()
@@ -430,7 +446,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L149">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L174">
actionPlanSave()
@@ -438,6 +454,21 @@
@IsTest
private static void actionPlanSave()
+
+
+
+ actionPlanSaveAndMakeDependent()
+
+
+ Signature
+ @IsTest
+ private static void actionPlanSaveAndMakeDependent()
+
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L217">
actionPlanSaveAndNew()
@@ -460,7 +491,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L344">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L385">
addNewTask()
@@ -475,7 +506,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L424">
changeAPTaskOwner()
@@ -490,7 +521,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L479">
checkActionPlanTaskList()
@@ -505,7 +536,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L329">
checkCompletedTasks()
@@ -520,7 +551,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L742">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L782">
checkMaxTasks()
@@ -535,7 +566,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L799">
checkMaxTasksError()
@@ -550,7 +581,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L630">
checkReferredObject()
@@ -565,7 +596,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L497">
checkSubjectItems()
@@ -580,7 +611,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L95">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L119">
constructorTests()
@@ -595,7 +626,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L584">
cyclicDependencyTasksFail()
@@ -610,7 +641,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L543">
cyclicDependencyTaskSuccess()
@@ -625,7 +656,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L758">
forceNoRecordTypes()
@@ -640,7 +671,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L701">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L741">
forceRecordTypes()
@@ -655,7 +686,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L318">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L359">
longNameTasks()
@@ -670,10 +701,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L29">
makeData()
+ Set up test data
Signature
@TestSetup
private static void makeData()
@@ -685,7 +717,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L106">
newAPWithoutTasks()
@@ -700,7 +732,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L276">
relateToMultipleContacts()
@@ -715,7 +747,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L456">
removeActionPlanTask()
@@ -723,6 +755,21 @@ @IsTest
private static void removeActionPlanTask()
+
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationControllerTest.cls#L57">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L62">
saveAndView()
@@ -745,7 +792,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L705">
setTaskRecordType()
@@ -760,7 +807,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationControllerTest.cls#L41">
singleRecordConstructor()
diff --git a/docs/ActionPlanCreationTaskWrapperTest.html b/docs/ActionPlanCreationTaskWrapperTest.html
index 30656b94..aa3d1ceb 100644
--- a/docs/ActionPlanCreationTaskWrapperTest.html
+++ b/docs/ActionPlanCreationTaskWrapperTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationTaskWrapperTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L24">
ActionPlanCreationTaskWrapperTest
@@ -349,7 +349,14 @@
>ActionPlanCreationController.ApTaskWrapper, ActionPlanCreationController
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanCreationTaskWrapperTest Methods
@@ -360,9 +367,13 @@ ActionPlanCreationTaskWrapperTest Methods
doEditActionPlan ()
+
+ We make a new Actoin Plan via Visualforce
doTemplateCreateEdit ()
+
+ Reused method to create an Action Plan Template - run in multiple user contexts
editActionPlanAssignByDefault ()
@@ -389,7 +400,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L41">
checkActionPlanTaskList()
@@ -404,13 +415,21 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L148">
doEditActionPlan()
+ We make a new Actoin Plan via Visualforce
Signature
private static ActionPlanCreationController doEditActionPlan()
+ Returns
+ ActionPlanCreationController
The created controller
+ See
+
+ editActionPlanAssignByDefault,
+ editActionPlanNOTAssignByDefault
+
@@ -419,13 +438,16 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L66">
doTemplateCreateEdit()
+ Reused method to create an Action Plan Template - run in multiple user contexts
Signature
private static ActionPlanCreationController doTemplateCreateEdit()
+ Returns
+ ActionPlanCreationController
The instance of the controller for the VF page
@@ -434,7 +456,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L168">
editActionPlanAssignByDefault()
@@ -449,7 +471,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L182">
editActionPlanNOTAssignByDefault()
@@ -464,7 +486,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanCreationTaskWrapperTest.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L29">
makeData()
@@ -480,7 +502,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L111">
makeFromTemplateAssignByDefault()
@@ -495,7 +517,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanCreationTaskWrapperTest.cls#L123">
makeFromTemplateNOTAssignByDefault()
diff --git a/docs/ActionPlanDetailController.html b/docs/ActionPlanDetailController.html
index 799d8201..f13727ea 100644
--- a/docs/ActionPlanDetailController.html
+++ b/docs/ActionPlanDetailController.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L22">
ActionPlanDetailController
@@ -342,8 +342,15 @@
Signature
public with sharing class ActionPlanDetailController
-
Rodrigo Birriel
- David Schach
2022
+ Authors
+
+ Rodrigo Birriel,
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanDetailController Properties
@@ -361,7 +368,7 @@ ActionPlanDetailController Properties
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L26">
actionPlan
@@ -378,7 +385,7 @@ ActionPlanDetailController Properties
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L125">
apTaskWrapperList
@@ -395,7 +402,7 @@ ActionPlanDetailController Properties
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L39">
canDisplayReminder
@@ -412,7 +419,7 @@ ActionPlanDetailController Properties
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L32">
hasRecordType
@@ -441,7 +448,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L45">
ActionPlanDetailController(stdController)
@@ -518,7 +525,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L69">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L69">
deletePlan()
@@ -542,7 +549,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L130">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L130">
getActionPlanTasks()
@@ -562,7 +569,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L306">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L311">
getCanShare()
@@ -584,7 +591,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L315">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L320">
getCanTransfer()
@@ -606,7 +613,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L113">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L113">
gethasControllingTasks()
@@ -630,7 +637,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L290">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L295">
getRecordTypeName()
@@ -648,7 +655,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L238">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L243">
getRelatedObjectLabel()
@@ -666,7 +673,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L256">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L261">
getrelatedRecordName()
@@ -684,7 +691,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L224">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L229">
getVersion()
@@ -702,7 +709,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L59">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L59">
onLoad()
@@ -728,7 +735,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L183">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L183">
ActionPlanDetailController.TaskWrapper
@@ -756,7 +763,7 @@ ActionPlanDetailController.TaskWrapper P
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L187">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L187">
apt
@@ -773,7 +780,7 @@ ActionPlanDetailController.TaskWrapper P
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L191">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L195">
taskId
@@ -790,7 +797,7 @@ ActionPlanDetailController.TaskWrapper P
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L195">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L199">
taskOwnerId
@@ -807,7 +814,7 @@ ActionPlanDetailController.TaskWrapper P
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L199">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L203">
taskOwnerName
@@ -817,6 +824,23 @@ ActionPlanDetailController.TaskWrapper P
The (standard) Task
OwnerId
+
+
+
+ tsk
+
+
+
+ public Task tsk
+
+
+ The Action Plan Task related Task
+
@@ -836,7 +860,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanDetailController.cls#L210">
TaskWrapper(aptParam, taskParam)
diff --git a/docs/ActionPlanDetailControllerTest.html b/docs/ActionPlanDetailControllerTest.html
index 7bcff02d..3651f6ed 100644
--- a/docs/ActionPlanDetailControllerTest.html
+++ b/docs/ActionPlanDetailControllerTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanDetailControllerTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L22">
ActionPlanDetailControllerTest
@@ -347,7 +347,10 @@
-
David Schach
+ Author
+
+ David Schach
+
ActionPlanDetailControllerTest Methods
@@ -388,7 +391,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L106">
checkActionPlanTemplateVersion()
@@ -403,7 +406,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L140">
checkDeleteActionPlan()
@@ -418,7 +421,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L88">
checkDependentTasks()
@@ -433,7 +436,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L161">
checkGetRelatedRecordName()
@@ -448,7 +451,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanDetailControllerTest.cls#L70">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L70">
checkNoTasks()
@@ -463,7 +466,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanDetailControllerTest.cls#L52">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L52">
checkTasks()
@@ -478,7 +481,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanDetailControllerTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L24">
constructorTests()
@@ -493,7 +496,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanDetailControllerTest.cls#L232">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L233">
forceNoRecordType()
@@ -508,7 +511,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanDetailControllerTest.cls#L211">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanDetailControllerTest.cls#L212">
forceRecordType()
diff --git a/docs/ActionPlanTemplateCreationCntrlTest.html b/docs/ActionPlanTemplateCreationCntrlTest.html
index 466ae6c7..dfc997e7 100644
--- a/docs/ActionPlanTemplateCreationCntrlTest.html
+++ b/docs/ActionPlanTemplateCreationCntrlTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateCreationCntrlTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L22">
ActionPlanTemplateCreationCntrlTest
@@ -346,7 +346,8 @@
-
David Schach 2since 2022
+ Author
+ David Schach 2since 2022
ActionPlanTemplateCreationCntrlTest Properties
@@ -362,7 +363,7 @@ ActionPlanTemplateCreationCntrlTest Prop
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateCreationCntrlTest.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L23">
TEMPLATE_TASKS_COUNT
@@ -438,7 +439,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L234">
addNewActionPlanTemplateTask()
@@ -453,7 +454,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L214">
addTemplateTask()
@@ -468,7 +469,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateCreationCntrlTest.cls#L125">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L125">
cancel()
@@ -483,7 +484,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L197">
checkMaxTasksError()
@@ -498,7 +499,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L371">
checkTemplateSubjectItem()
@@ -513,7 +514,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L350">
checkTemplateTaskSize()
@@ -528,7 +529,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateCreationCntrlTest.cls#L26">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L26">
contructor()
@@ -543,7 +544,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L389">
cyclicDependencyFail()
@@ -558,7 +559,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L467">
cyclicDependencySuccess()
@@ -573,7 +574,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L179">
forceNoRecordType()
@@ -588,7 +589,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L437">
itselfCyclicDependencyFail()
@@ -603,7 +604,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L323">
longNameTemplateTasks()
@@ -618,7 +619,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L260">
removeTemplateTask()
@@ -633,7 +634,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L279">
removingActionPlanTemplateTask()
@@ -648,7 +649,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L305">
retrievingTemplateTasks()
@@ -663,7 +664,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateCreationCntrlTest.cls#L57">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L57">
save()
@@ -678,7 +679,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateCreationCntrlTest.cls#L86">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L86">
saveTemplate()
@@ -693,7 +694,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateCreationCntrlTest.cls#L146">
setTaskRecordType()
diff --git a/docs/ActionPlanTemplateCreationController.html b/docs/ActionPlanTemplateCreationController.html
index 68d4407b..d6e6b901 100644
--- a/docs/ActionPlanTemplateCreationController.html
+++ b/docs/ActionPlanTemplateCreationController.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L23">
ActionPlanTemplateCreationController
@@ -343,8 +343,15 @@ Signature
public with sharing class ActionPlanTemplateCreationController
-
Rodrigo Birriel
- David Schach
v3
+ Since
+
+ v3
+
+ Authors
+
+ Rodrigo Birriel,
+ David Schach
+
ActionPlanTemplateCreationController Properties
@@ -362,7 +369,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L29">
actionPlanTemplate
@@ -382,7 +389,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L311">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L314">
aptTasks
@@ -393,7 +400,7 @@ ActionPlanTemplateCreationController Pro
@TestVisible
-
+ The list of Template Tasks (no wrapper) - private for internal use only
@@ -402,7 +409,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L37">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L37">
canDisplayReminder
@@ -420,7 +427,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L504">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L507">
errorMsg
@@ -438,7 +445,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L44">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L44">
pendingTemplateTaskDeletes
@@ -458,7 +465,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L33">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L33">
subTitle
@@ -476,7 +483,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L41">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L41">
taskHasRecordType
@@ -494,7 +501,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L24">
taskIndex
@@ -512,7 +519,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L567">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L570">
taskPriorities
@@ -530,7 +537,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L550">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L553">
taskTypes
@@ -548,7 +555,7 @@ ActionPlanTemplateCreationController Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L48">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L48">
templateId
@@ -584,7 +591,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L57">
ActionPlanTemplateCreationController(stdController)
@@ -731,7 +738,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L231">
addTemplateTask()
@@ -747,7 +754,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L521">
calculateTaskIndexValue()
@@ -765,7 +772,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L212">
cancelTemplate()
@@ -783,7 +790,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L423">
checkCycleDependent()
@@ -801,7 +808,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L467">
dependantCycle(inspectedTask, index)
@@ -826,7 +833,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L117">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L117">
doSave()
@@ -847,7 +854,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L537">
getDefaultTaskRecordTypeId()
@@ -871,7 +878,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L510">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L513">
getErrorMsg()
@@ -893,7 +900,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L589">
getHoursOption()
@@ -915,7 +922,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L577">
getTaskPriorities()
@@ -943,7 +950,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L546">
getTaskRTPicklistValues()
@@ -967,7 +974,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L557">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L560">
getTaskTypes()
@@ -993,7 +1000,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L402">
getTemplateSubjectItems()
@@ -1011,7 +1018,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L362">
getTemplateTasks()
@@ -1029,7 +1036,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L394">
getTemplateTaskSize()
@@ -1047,7 +1054,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L295">
getTemplateWrappers()
@@ -1069,7 +1076,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L103">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L103">
onLoad()
@@ -1091,7 +1098,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L331">
queryAPTTasks(templateId)
@@ -1117,7 +1124,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L249">
removeTemplateTask()
@@ -1133,7 +1140,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L196">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L196">
saveAndNew()
@@ -1151,7 +1158,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L180">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L180">
saveTemplate()
@@ -1172,7 +1179,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L435">
templateCycleDependent()
@@ -1194,7 +1201,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L600">
ActionPlanTemplateCreationController.ApTTaskWrapper
@@ -1203,8 +1210,11 @@ Signature
public class ApTTaskWrapper
-
Matias Menafra @date 08/08/2010
- David Schach @date 05/2021
+ Authors
+
+ Matias Menafra @date 08/08/2010,
+ David Schach @date 05/2021
+
ActionPlanTemplateCreationController.ApTTaskWrapper Properties
@@ -1222,7 +1232,7 @@ ActionPlanTemplateCreationController.ApT
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L612">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L615">
isLast
@@ -1239,7 +1249,7 @@ ActionPlanTemplateCreationController.ApT
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L607">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L610">
position
@@ -1256,7 +1266,7 @@ ActionPlanTemplateCreationController.ApT
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L602">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L605">
task
@@ -1285,7 +1295,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateCreationController.cls#L624">
ApTTaskWrapper(apTask, pos, apTTaskRTId)
diff --git a/docs/ActionPlanTemplateDetailCntrlTest.html b/docs/ActionPlanTemplateDetailCntrlTest.html
index d790009b..af3f0b50 100644
--- a/docs/ActionPlanTemplateDetailCntrlTest.html
+++ b/docs/ActionPlanTemplateDetailCntrlTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateDetailCntrlTest.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L23">
ActionPlanTemplateDetailCntrlTest
@@ -347,7 +347,14 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanTemplateDetailCntrlTest Methods
@@ -385,7 +392,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateDetailCntrlTest.cls#L103">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L103">
checkNoTasks()
@@ -400,7 +407,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateDetailCntrlTest.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L25">
constructor()
@@ -415,7 +422,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L121">
deleteActionPlanTemplate()
@@ -430,7 +437,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateDetailCntrlTest.cls#L186">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L187">
exportTest()
@@ -445,7 +452,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L82">
forceNoRecordType()
@@ -460,7 +467,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateDetailCntrlTest.cls#L60">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L60">
forceRecordType()
@@ -475,7 +482,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L165">
retrievingActionPlanTemplate()
@@ -490,7 +497,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateDetailCntrlTest.cls#L142">
retrievingTemplateTasks()
diff --git a/docs/ActionPlanTemplateDetailController.html b/docs/ActionPlanTemplateDetailController.html
index debd77b5..7a7b3fc3 100644
--- a/docs/ActionPlanTemplateDetailController.html
+++ b/docs/ActionPlanTemplateDetailController.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L21">
ActionPlanTemplateDetailController
@@ -342,7 +342,14 @@
Signature
public with sharing class ActionPlanTemplateDetailController
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanTemplateDetailController Properties
@@ -360,7 +367,7 @@ ActionPlanTemplateDetailController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L27">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L27">
actionPlanExportXMLId
@@ -369,7 +376,7 @@ ActionPlanTemplateDetailController Prope
- The Id of the Action Plan for Exporting. Shown on the Export page that shares thsi controller
+ The Id of the Action Plan for Exporting. Shown on the Export page that shares this controller
@@ -378,7 +385,7 @@ ActionPlanTemplateDetailController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L23">
actionPlanTemplate
@@ -398,7 +405,7 @@ ActionPlanTemplateDetailController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L35">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L35">
canDisplayReminder
@@ -416,7 +423,7 @@ ActionPlanTemplateDetailController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L31">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L31">
taskHasRecordType
@@ -451,7 +458,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L44">
ActionPlanTemplateDetailController(stdController)
@@ -527,7 +534,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L80">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L80">
deleteTemplate()
@@ -545,7 +552,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L130">
exportTemplateToXMLDoc()
@@ -565,7 +572,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L175">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L175">
getCanShare()
@@ -591,7 +598,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L185">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L185">
getCanTransfer()
@@ -617,7 +624,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L64">
getRecordTypeName()
@@ -635,7 +642,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L140">
getSuccessMessage()
@@ -657,7 +664,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L99">
getTemplateTasks()
@@ -675,7 +682,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L55">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateDetailController.cls#L55">
onLoad()
diff --git a/docs/ActionPlanTemplateExport.html b/docs/ActionPlanTemplateExport.html
index 26b75ea6..376b1bf4 100644
--- a/docs/ActionPlanTemplateExport.html
+++ b/docs/ActionPlanTemplateExport.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L21">
ActionPlanTemplateExport
@@ -349,7 +349,10 @@
>ActionPlanTemplateDetailController.exportTemplateToXMLDoc
-
2011
+ Since
+
+ 2011
+
ActionPlanTemplateExport Properties
@@ -367,7 +370,7 @@ ActionPlanTemplateExport Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L30">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L30">
fileOrDocumentId
@@ -386,7 +389,7 @@ ActionPlanTemplateExport Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L25">
templateId
@@ -415,7 +418,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L36">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L36">
ActionPlanTemplateExport(templateId)
@@ -467,7 +470,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L129">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L129">
buildXmlString(target)
@@ -488,7 +491,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L46">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L46">
export()
@@ -514,7 +517,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L110">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L110">
saveToContent(name, xml)
@@ -543,7 +546,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L91">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L91">
saveToDocument(name, xml)
@@ -570,7 +573,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L196">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateExport.cls#L196">
writeElement(out, tag, content)
diff --git a/docs/ActionPlanTemplateExportTest.html b/docs/ActionPlanTemplateExportTest.html
index 7e41be35..b80e3434 100644
--- a/docs/ActionPlanTemplateExportTest.html
+++ b/docs/ActionPlanTemplateExportTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateExportTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateExportTest.cls#L25">
ActionPlanTemplateExportTest
@@ -348,7 +348,15 @@
ActionPlanTemplateExport,
ActionPlanTemplateImportController
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlanTemplateExportTest Methods
@@ -371,7 +379,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateExportTest.cls#L41">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateExportTest.cls#L42">
exportDocTest()
@@ -386,7 +394,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateExportTest.cls#L58">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateExportTest.cls#L59">
exportFileTest()
@@ -401,7 +409,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateExportTest.cls#L26">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateExportTest.cls#L27">
exportTest()
diff --git a/docs/ActionPlanTemplateImport.html b/docs/ActionPlanTemplateImport.html
index 749fb32b..0ab02853 100644
--- a/docs/ActionPlanTemplateImport.html
+++ b/docs/ActionPlanTemplateImport.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L22">
ActionPlanTemplateImport
@@ -347,7 +347,14 @@
-
David Schach
2022
+ Since
+
+ 2022
+
+ Author
+
+ David Schach
+
ActionPlanTemplateImport Properties
@@ -363,7 +370,7 @@ ActionPlanTemplateImport Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L23">
importedTasks
@@ -378,7 +385,7 @@ ActionPlanTemplateImport Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L24">
newTasks
@@ -405,7 +412,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L29">
ActionPlanTemplateImport()
@@ -473,7 +480,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L396">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L396">
getDecodedString(reader)
@@ -495,7 +502,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L121">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L121">
importAPTemplate(xml)
@@ -517,7 +524,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L143">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L143">
importAPTtasks(xml, apTemplateId)
@@ -540,7 +547,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L163">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L163">
parseMetaData(reader)
@@ -563,7 +570,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L218">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L218">
parseTemplate(reader)
@@ -584,7 +591,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L271">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L271">
parseTemplateTask(reader, apTemplateId)
@@ -607,7 +614,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L41">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L41">
processImportedDocument(document)
@@ -631,7 +638,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L97">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L97">
readingMetaData(xml)
@@ -653,7 +660,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L365">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L365">
setupDependentTasks()
@@ -675,7 +682,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L401">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImport.cls#L401">
ActionPlanTemplateImport.ImportException
diff --git a/docs/ActionPlanTemplateImportCntrlTest.html b/docs/ActionPlanTemplateImportCntrlTest.html
index 2bb56e80..d714c55f 100644
--- a/docs/ActionPlanTemplateImportCntrlTest.html
+++ b/docs/ActionPlanTemplateImportCntrlTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L25">
ActionPlanTemplateImportCntrlTest
@@ -347,7 +347,15 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlanTemplateImportCntrlTest Properties
@@ -363,7 +371,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L26">
xmlImport
@@ -378,7 +386,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L30">
xmlImportEmptyMetaData
@@ -393,7 +401,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L30">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L31">
xmlImportFromExport
@@ -408,7 +416,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L27">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L28">
xmlImportWrongAPTask
@@ -423,7 +431,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L26">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L27">
xmlImportWrongAPTemplate
@@ -438,7 +446,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L28">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L29">
xmlImportWrongMetaData
@@ -453,7 +461,7 @@ ActionPlanTemplateImportCntrlTest Proper
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L31">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L32">
xmlWithControllingTasks
@@ -505,7 +513,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L131">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L132">
badFields()
@@ -520,7 +528,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L155">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L156">
controllingTask()
@@ -535,7 +543,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L169">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L170">
roundTrip()
@@ -550,7 +558,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlanTemplateImportCntrlTest.cls#L34">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L35">
xMLImport()
@@ -565,7 +573,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L49">
xMLImportEmptyAttachment()
@@ -580,7 +588,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L62">
xMLImportEmptyXML()
@@ -595,7 +603,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L118">
xMLImportFromExport()
@@ -610,7 +618,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L104">
xMLImportWrongMetaData()
@@ -625,7 +633,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L76">
xMLImportWrongTemplate()
@@ -640,7 +648,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlanTemplateImportCntrlTest.cls#L90">
xMLImportWrongTemplateTask()
diff --git a/docs/ActionPlanTemplateImportController.html b/docs/ActionPlanTemplateImportController.html
index 26227eba..2ead1bd4 100644
--- a/docs/ActionPlanTemplateImportController.html
+++ b/docs/ActionPlanTemplateImportController.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L23">
ActionPlanTemplateImportController
@@ -347,7 +347,14 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlanTemplateImportController Properties
@@ -365,7 +372,7 @@ ActionPlanTemplateImportController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L29">
attachment
@@ -394,7 +401,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L34">
ActionPlanTemplateImportController()
@@ -422,7 +429,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L43">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlanTemplateImportController.cls#L43">
importTemplate()
diff --git a/docs/ActionPlansBuilderUtilities.html b/docs/ActionPlansBuilderUtilities.html
index cb881add..426df2ae 100644
--- a/docs/ActionPlansBuilderUtilities.html
+++ b/docs/ActionPlansBuilderUtilities.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L25">
ActionPlansBuilderUtilities
@@ -349,8 +349,15 @@
ActionPlanCreationController,
ActionPlansQueueableBuilder
-
Rodrigo Birriel
- David Schach
v3
+ Authors
+
+ Rodrigo Birriel,
+ David Schach
+
+ Since
+
+ v3
+
ActionPlansBuilderUtilities Properties
@@ -368,32 +375,15 @@ ActionPlansBuilderUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L26">
- baseAPTaskList
-
-
-
- private List<APTask__c> baseAPTaskList
-
-
-
-
-
-
-
- mode
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L59">
+ allTasksToUpsert
- private ApEditMode mode
+ private List<Task> allTasksToUpsert
-
+ A single list of all Tasks - we set the DMLOption to send an email notification when we add the Task to this list
@@ -402,32 +392,15 @@ ActionPlansBuilderUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L55">
- myNewTasksWithEmail
-
-
-
- private List<Task> myNewTasksWithEmail
-
-
- Tasks to insert that have Send Email
checked
-
-
-
-
- myOldTasksWithEmail
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L29">
+ baseAPTaskList
- private List<Task> myOldTasksWithEmail
+ private List<APTask__c> baseAPTaskList
- Tasks to update that have Send Email
checked
+ Local store of aPTListparam
passed to constructor
@@ -436,15 +409,15 @@ ActionPlansBuilderUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L46">
- myTasksWithOutEmail
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L54">
+ mode
- private List<Task> myTasksWithOutEmail
+ private ApEditMode mode
- All tasks for upserting that will not require an email to be sent
+ Store the enum value
@@ -453,7 +426,7 @@ ActionPlansBuilderUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L28">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L33">
relActionPlans
@@ -461,24 +434,7 @@ ActionPlansBuilderUtilities Properties
private List<ActionPlan__c> relActionPlans
-
-
-
-
-
- relAPTaskList
-
-
-
- private List<APTask__c> relAPTaskList
-
-
-
+ The constructed ActionPlan__c
records
@@ -487,7 +443,7 @@ ActionPlansBuilderUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L31">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L38">
relatedObjectName
@@ -495,7 +451,7 @@ ActionPlansBuilderUtilities Properties
private String relatedObjectName
-
+ Local store of refType
passed to constructor
@@ -504,7 +460,7 @@ ActionPlansBuilderUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L32">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L42">
relatedRecordIDs
@@ -512,7 +468,7 @@ ActionPlansBuilderUtilities Properties
private Set<Id> relatedRecordIDs
-
+ Local store of oIdsSet
passed to constructor
@@ -532,7 +488,7 @@ Enums
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L37">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L47">
ApEditMode
@@ -551,7 +507,7 @@ ActionPlansBuilderUtilities Constructors
- ActionPlansBuilderUtilities (baseObj, aPTListparam, refType, oIdsLIst)
+ ActionPlansBuilderUtilities (baseObj, aPTListparam, refType, oIdsSet)
Constructor
@@ -564,15 +520,15 @@
- ActionPlansBuilderUtilities(baseObj, aPTListparam, refType, oIdsLIst)
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L68">
+ ActionPlansBuilderUtilities(baseObj, aPTListparam, refType, oIdsSet)
Constructor
Signature
- public ActionPlansBuilderUtilities(ActionPlan__c baseObj, List<APTask__c> aPTListparam, String refType, Set<Id> oIdsLIst)
+ public ActionPlansBuilderUtilities(ActionPlan__c baseObj, List<APTask__c> aPTListparam, String refType, Set<Id> oIdsSet)
Parameters
baseObj
@@ -584,7 +540,7 @@ refType
Type: String
Related object Name
- oIdsLIst
+ oIdsSet
Type: Set<Id>
Parent IDs
@@ -634,7 +590,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L102">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L106">
generateActionPlans()
@@ -656,7 +612,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L416">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L418">
generateObjectFeeds(recIDs)
@@ -682,7 +638,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L346">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L333">
getAPTaskTemplateUser(ap, relObjOwners, apTaskUser)
@@ -716,7 +672,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L462">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L464">
getPostObjectBody(recID, apName)
@@ -745,7 +701,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L351">
getRelatedRecordOwnerId(ap, relObjOwners)
@@ -772,7 +728,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansBuilderUtilities.cls#L375">
retrieveOwnersDataRelatedObject(relatedRecordIDs)
diff --git a/docs/ActionPlansCreateMultipleAPsExtTest.html b/docs/ActionPlansCreateMultipleAPsExtTest.html
index 5872093b..b4b250aa 100644
--- a/docs/ActionPlansCreateMultipleAPsExtTest.html
+++ b/docs/ActionPlansCreateMultipleAPsExtTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansCreateMultipleAPsExtTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansCreateMultipleAPsExtTest.cls#L24">
ActionPlansCreateMultipleAPsExtTest
@@ -349,7 +349,15 @@
-
David Schach
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlansCreateMultipleAPsExtTest Methods
@@ -369,7 +377,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansCreateMultipleAPsExtTest.cls#L49">
givenNoRecordsToCreateThenNotCreated()
@@ -384,7 +392,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansCreateMultipleAPsExtTest.cls#L26">
givenRecordsToCreateThenCreated()
diff --git a/docs/ActionPlansCreateMultipleAPsExtension.html b/docs/ActionPlansCreateMultipleAPsExtension.html
index 5905f560..666576fc 100644
--- a/docs/ActionPlansCreateMultipleAPsExtension.html
+++ b/docs/ActionPlansCreateMultipleAPsExtension.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L23">
ActionPlansCreateMultipleAPsExtension
@@ -343,7 +343,14 @@ Signature
global with sharing class ActionPlansCreateMultipleAPsExtension
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansCreateMultipleAPsExtension Properties
@@ -361,7 +368,7 @@ ActionPlansCreateMultipleAPsExtension Pr
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L32">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L32">
objIDs
@@ -378,7 +385,7 @@ ActionPlansCreateMultipleAPsExtension Pr
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L27">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L27">
stdSetCntrlr
@@ -411,7 +418,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L39">
ActionPlansCreateMultipleAPsExtension(stdSetController)
@@ -447,7 +454,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L52">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansCreateMultipleAPsExtension.cls#L52">
doRedirect()
diff --git a/docs/ActionPlansDeleteMultipleAPExtTest.html b/docs/ActionPlansDeleteMultipleAPExtTest.html
index fd488cd8..da1946c5 100644
--- a/docs/ActionPlansDeleteMultipleAPExtTest.html
+++ b/docs/ActionPlansDeleteMultipleAPExtTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansDeleteMultipleAPExtTest.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansDeleteMultipleAPExtTest.cls#L21">
ActionPlansDeleteMultipleAPExtTest
@@ -346,7 +346,10 @@
ActionPlansDeleteMultipleAPsExtension
-
David Schach
+ Author
+
+ David Schach
+
ActionPlansDeleteMultipleAPExtTest Properties
@@ -362,7 +365,7 @@ ActionPlansDeleteMultipleAPExtTest Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansDeleteMultipleAPExtTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansDeleteMultipleAPExtTest.cls#L22">
APS_TO_CREATE
@@ -378,6 +381,8 @@ ActionPlansDeleteMultipleAPExtTest Methods<
-
datasetup ()
+
+ Set up custom settings
-
givenNoRecordsToDeleteThenNotDeleted ()
@@ -396,10 +401,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansDeleteMultipleAPExtTest.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansDeleteMultipleAPExtTest.cls#L28">
datasetup()
+ Set up custom settings
Signature
@testSetup
private static void datasetup()
@@ -411,7 +417,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansDeleteMultipleAPExtTest.cls#L76">
givenNoRecordsToDeleteThenNotDeleted()
@@ -426,7 +432,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansDeleteMultipleAPExtTest.cls#L62">
givenRecordsToDeleteThenDeleted()
@@ -441,7 +447,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansDeleteMultipleAPExtTest.cls#L92">
noDeletePermission()
diff --git a/docs/ActionPlansDeleteMultipleAPExtension.html b/docs/ActionPlansDeleteMultipleAPExtension.html
index d5c6c9cb..110a0c1b 100644
--- a/docs/ActionPlansDeleteMultipleAPExtension.html
+++ b/docs/ActionPlansDeleteMultipleAPExtension.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
-
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L28">
ActionPlansDeleteMultipleAPExtension
@@ -348,8 +348,15 @@
{@link [Salesforce StackExchange](https://salesforce.stackexchange.com/a/4141/59)},
CanTheUser
-
Andrew Fawcett
- David Schach
2022
+ Authors
+
+ Andrew Fawcett,
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansDeleteMultipleAPExtension Properties
@@ -367,7 +374,7 @@ ActionPlansDeleteMultipleAPExtension Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L34">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L34">
actionPlansToShow
@@ -384,7 +391,7 @@ ActionPlansDeleteMultipleAPExtension Pro
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L29">
standardController
@@ -415,7 +422,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L40">
ActionPlansDeleteMultipleAPExtension(stdSetController)
@@ -451,7 +458,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansDeleteMultipleAPExtension.cls#L51">
deleteRecords()
diff --git a/docs/ActionPlansObjectTriggersTest.html b/docs/ActionPlansObjectTriggersTest.html
index 998f8929..e6bdf128 100644
--- a/docs/ActionPlansObjectTriggersTest.html
+++ b/docs/ActionPlansObjectTriggersTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L22">
ActionPlansObjectTriggersTest
@@ -347,7 +347,10 @@
-
David Schach
+ Author
+
+ David Schach
+
ActionPlansObjectTriggersTest Properties
@@ -363,7 +366,7 @@ ActionPlansObjectTriggersTest Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L23">
aps
@@ -406,6 +409,8 @@ ActionPlansObjectTriggersTest Methods
makeData ()
+
+ Set up custom settings
opportunityTrigger ()
@@ -418,7 +423,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L38">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L40">
accountTrigger()
@@ -433,7 +438,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L72">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L75">
campaignTrigger()
@@ -448,7 +453,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L106">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L111">
caseTrigger()
@@ -463,7 +468,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L140">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L147">
contactTrigger()
@@ -478,7 +483,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L174">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L183">
contractTrigger()
@@ -493,7 +498,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L330">
leadConversionAccount()
@@ -508,7 +513,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L291">
leadConversionContact()
@@ -523,7 +528,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L376">
leadConversionOpportunity()
@@ -538,7 +543,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L208">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L219">
leadTrigger()
@@ -553,10 +558,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L26">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L28">
makeData()
+ Set up custom settings
Signature
@TestSetup
private static void makeData()
@@ -568,7 +574,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansObjectTriggersTest.cls#L242">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansObjectTriggersTest.cls#L255">
opportunityTrigger()
diff --git a/docs/ActionPlansPostInstallScript.html b/docs/ActionPlansPostInstallScript.html
index 1fbe693c..731f5395 100644
--- a/docs/ActionPlansPostInstallScript.html
+++ b/docs/ActionPlansPostInstallScript.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L19">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L19">
ActionPlansPostInstallScript
@@ -343,7 +343,14 @@
Signature
global class ActionPlansPostInstallScript implements InstallHandler
-
David Schach
2022
+ Since
+
+ 2022
+
+ Author
+
+ David Schach
+
ActionPlansPostInstallScript Methods
@@ -379,7 +386,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L41">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L41">
onFirstInstall()
@@ -399,7 +406,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L25">
onInstall(context)
@@ -423,7 +430,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L110">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L110">
onPush()
@@ -441,7 +448,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L104">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansPostInstallScript.cls#L104">
onUpgrade()
diff --git a/docs/ActionPlansPostInstallScriptTest.html b/docs/ActionPlansPostInstallScriptTest.html
index 30eda90f..e137cdb3 100644
--- a/docs/ActionPlansPostInstallScriptTest.html
+++ b/docs/ActionPlansPostInstallScriptTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansPostInstallScriptTest.cls#L19">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansPostInstallScriptTest.cls#L20">
ActionPlansPostInstallScriptTest
@@ -347,7 +347,15 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlansPostInstallScriptTest Methods
@@ -364,7 +372,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansPostInstallScriptTest.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansPostInstallScriptTest.cls#L22">
installScript()
diff --git a/docs/ActionPlansQueueableBuilder.html b/docs/ActionPlansQueueableBuilder.html
index af49ef32..547155ff 100644
--- a/docs/ActionPlansQueueableBuilder.html
+++ b/docs/ActionPlansQueueableBuilder.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L23">
ActionPlansQueueableBuilder
@@ -347,7 +347,14 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansQueueableBuilder Properties
@@ -363,12 +370,12 @@ ActionPlansQueueableBuilder Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L24">
- builtUtil
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L24">
+ buildUtil
- private ActionPlansBuilderUtilities builtUtil
+ private ActionPlansBuilderUtilities buildUtil
@@ -392,7 +399,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L34">
ActionPlansQueueableBuilder(baseObj, aPTList, refType, oIdsSet)
@@ -415,6 +422,12 @@ oIdsSet
Type: Set<Id>
IDs of related parents
+ See
+
@@ -425,7 +438,9 @@ ActionPlansQueueableBuilder Methods
execute (qc)
- Instead of a batch, we use queuable because it's more simple than Batch Apex
+
+ Instead of a batch, we use queuable because it's more simple than Batch Apex
TODO: Change email error notification to Lightning notification
+
@@ -435,11 +450,13 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L42">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansQueueableBuilder.cls#L44">
execute(qc)
- Instead of a batch, we use queuable because it's more simple than Batch Apex
+
+ Instead of a batch, we use queuable because it's more simple than Batch Apex
TODO: Change email error notification to Lightning notification
+
Signature
public void execute(QueueableContext qc)
diff --git a/docs/ActionPlansQueueableBuilderTest.html b/docs/ActionPlansQueueableBuilderTest.html
index 3a065579..91696df7 100644
--- a/docs/ActionPlansQueueableBuilderTest.html
+++ b/docs/ActionPlansQueueableBuilderTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansQueueableBuilderTest.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansQueueableBuilderTest.cls#L24">
ActionPlansQueueableBuilderTest
@@ -347,7 +347,15 @@
ActionPlansQueuableBuilder
-
David Schach
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlansQueueableBuilderTest Methods
@@ -370,7 +378,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansQueueableBuilderTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansQueueableBuilderTest.cls#L26">
makeData()
@@ -385,7 +393,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansQueueableBuilderTest.cls#L35">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansQueueableBuilderTest.cls#L37">
runQueueContact()
@@ -400,7 +408,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansQueueableBuilderTest.cls#L88">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansQueueableBuilderTest.cls#L90">
runQueueException()
diff --git a/docs/ActionPlansRedirect.html b/docs/ActionPlansRedirect.html
index 12a606b8..2249c68f 100644
--- a/docs/ActionPlansRedirect.html
+++ b/docs/ActionPlansRedirect.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L18">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L18">
ActionPlansRedirect
@@ -343,7 +343,14 @@
Signature
public with sharing class ActionPlansRedirect
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansRedirect Properties
@@ -361,7 +368,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L21">
actionPlan
@@ -378,7 +385,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L19">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L19">
actionPlanTask
@@ -395,7 +402,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L22">
actionPlanTemplate
@@ -412,7 +419,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L20">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L20">
actionPlanTemplateTask
@@ -429,7 +436,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L28">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L28">
objName
@@ -446,7 +453,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L23">
parentId
@@ -463,7 +470,7 @@ ActionPlansRedirect Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L24">
recordId
@@ -492,7 +499,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L35">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L35">
ActionPlansRedirect(controller)
@@ -534,7 +541,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L78">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L78">
cancel()
@@ -552,7 +559,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L98">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L98">
redirect()
@@ -570,7 +577,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L64">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansRedirect.cls#L64">
save()
diff --git a/docs/ActionPlansRedirectTest.html b/docs/ActionPlansRedirectTest.html
index 5cedde2b..98ef1318 100644
--- a/docs/ActionPlansRedirectTest.html
+++ b/docs/ActionPlansRedirectTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansRedirectTest.cls#L19">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansRedirectTest.cls#L20">
ActionPlansRedirectTest
@@ -342,12 +342,20 @@
Test for Redirect Visualforce Controller
Signature
@IsTest
- public class ActionPlansRedirectTest
+ private class ActionPlansRedirectTest
See
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlansRedirectTest Methods
@@ -367,6 +375,8 @@ ActionPlansRedirectTest Methods
makeData ()
+
+ Set up custom settings
@@ -376,7 +386,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansRedirectTest.cls#L65">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansRedirectTest.cls#L69">
actionPlanChangeOwner()
@@ -391,7 +401,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansRedirectTest.cls#L85">
actionPlanTemplateChangeOwner()
@@ -406,7 +416,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansRedirectTest.cls#L31">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansRedirectTest.cls#L35">
aPTaskRedirect()
@@ -421,7 +431,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansRedirectTest.cls#L48">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansRedirectTest.cls#L52">
aPTTaskRedirect()
@@ -436,10 +446,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansRedirectTest.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansRedirectTest.cls#L25">
makeData()
+ Set up custom settings
Signature
@TestSetup
private static void makeData()
diff --git a/docs/ActionPlansSectionHeaderController.html b/docs/ActionPlansSectionHeaderController.html
index f717ab6b..c6efa46e 100644
--- a/docs/ActionPlansSectionHeaderController.html
+++ b/docs/ActionPlansSectionHeaderController.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L28">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L28">
ActionPlansSectionHeaderController
@@ -352,11 +352,18 @@
>https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon
-
David Schach
- Cricketlang
2022
+ Since
+
+ 2022
+
+ Authors
+
+ David Schach,
+ Cricketlang
+
Example
<div class="slds-media__figure">
- <span class="slds-icon_container {!ObjectIconInfo['iconStyle']}" title="{!$ObjectType[sObjType].label}">
+ <span class="slds-icon_container {!ObjectIconInfo['iconStyle']}" title="{!$ObjectType['sObjType'].label}">
<apex:image url="{!ObjectIconInfo['iconURL']}" styleClass="slds-icon slds-page-header__icon" html-aria-hidden="true" />
<span class="slds-assistive-text">{!$ObjectType[sObjType].label}</span>
</span>
@@ -378,7 +385,7 @@ ActionPlansSectionHeaderController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L32">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L32">
objectName
@@ -395,7 +402,7 @@ ActionPlansSectionHeaderController Prope
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L51">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L51">
orgObject
@@ -426,13 +433,23 @@ ActionPlansSectionHeaderController Methods<
Given an object name, return if it is a custom object
+
+ queryRecords (queryText)
+
+
+ Main code for lightning lookup. Included in this class because we use this as the controller for our lookups
+ the code is duplicated in AciontPlanCreationController because there is a lookup directly in that page (for now)
This is a different approach than in
+ ActionPlanCreationController, as we pass in the full query here, but there it is done by passing only the search key.
+
+
retrieveIconForObject (sObjectName)
- Explores the schema of the soject passed in and finds lightning icon style and image url for sObject If nothing is found, defaults to the custom icon Code
- adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Thanks to
- https://salesforce.stackexchange.com/users/12582/cricketlang
+ Explores the schema of the soject passed in and finds lightning icon style and image url for sObject
If nothing is found, defaults to the custom icon
+
Code adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon
Thanks to
+ https://salesforce.stackexchange.com/users/12582/cricketlang
Todo: Avoid describing all applications and tabs, and even use "break" to shorten
+ the runtime
@@ -443,7 +460,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L67">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L67">
getIsCustom()
@@ -467,7 +484,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L58">
getObjectIconInfo()
@@ -491,7 +508,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L76">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L76">
isCustom(sObjectName)
@@ -506,6 +523,36 @@
Returns
Boolean
Is this object a custom object?
+
+
+
+ queryRecords(queryText)
+
+
+
+ Main code for lightning lookup. Included in this class because we use this as the controller for our lookups
+ the code is duplicated in AciontPlanCreationController because there is a lookup directly in that page (for now)
This is a different approach than in
+ ActionPlanCreationController, as we pass in the full query here, but there it is done by passing only the search key.
+
+ Signature
+ @RemoteAction
+ public static List<SObject> queryRecords(String queryText)
+ Parameters
+ queryText
+ Type: String
+ SOQL query to return records for the lookup
+ Returns
+ List<SObject>
Returned records
+ See
+
+
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansSectionHeaderController.cls#L92">
retrieveIconForObject(sObjectName)
- Explores the schema of the soject passed in and finds lightning icon style and image url for sObject If nothing is found, defaults to the custom icon Code
- adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Thanks to
- https://salesforce.stackexchange.com/users/12582/cricketlang
+ Explores the schema of the soject passed in and finds lightning icon style and image url for sObject
If nothing is found, defaults to the custom icon
+
Code adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon
Thanks to
+ https://salesforce.stackexchange.com/users/12582/cricketlang
Todo: Avoid describing all applications and tabs, and even use "break" to shorten
+ the runtime
Signature
diff --git a/docs/ActionPlansSectionHeaderControllerTest.html b/docs/ActionPlansSectionHeaderControllerTest.html
index 83425d5c..99cc9bd1 100644
--- a/docs/ActionPlansSectionHeaderControllerTest.html
+++ b/docs/ActionPlansSectionHeaderControllerTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansSectionHeaderControllerTest.cls#L19">
ActionPlansSectionHeaderControllerTest
@@ -347,7 +347,14 @@
ActionPlansSectionHeaderController
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansSectionHeaderControllerTest Methods
@@ -355,6 +362,8 @@ ActionPlansSectionHeaderControllerTest Meth
-
makeData ()
+
+ Set up custom settings
-
nullObject ()
@@ -376,10 +385,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansSectionHeaderControllerTest.cls#L21">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansSectionHeaderControllerTest.cls#L24">
makeData()
+ Set up custom settings
Signature
@TestSetup
private static void makeData()
@@ -391,7 +401,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansSectionHeaderControllerTest.cls#L76">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansSectionHeaderControllerTest.cls#L79">
nullObject()
@@ -406,7 +416,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansSectionHeaderControllerTest.cls#L48">
objectTabDescribeNegative()
@@ -421,7 +431,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansSectionHeaderControllerTest.cls#L67">
objectTabDescribeNotInApplication()
@@ -436,7 +446,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansSectionHeaderControllerTest.cls#L31">
objectTabDescribePositive()
diff --git a/docs/ActionPlansTaskTriggerUtilities.html b/docs/ActionPlansTaskTriggerUtilities.html
index 3068c646..faf89297 100644
--- a/docs/ActionPlansTaskTriggerUtilities.html
+++ b/docs/ActionPlansTaskTriggerUtilities.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
-
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L23">
ActionPlansTaskTriggerUtilities
@@ -343,7 +343,14 @@
Signature
public without sharing class ActionPlansTaskTriggerUtilities
-
David Schach
2022
+ Since
+
+ - 2022
+
+ Author
+
+ David Schach
+
ActionPlansTaskTriggerUtilities Properties
@@ -359,7 +366,7 @@ ActionPlansTaskTriggerUtilities Properti
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L24">
dependentApts
@@ -374,7 +381,7 @@ ActionPlansTaskTriggerUtilities Properti
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L25">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L25">
tasksSendEmail
@@ -389,7 +396,7 @@ ActionPlansTaskTriggerUtilities Properti
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L26">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L26">
tasksSendNoEmail
@@ -414,9 +421,9 @@ ActionPlansTaskTriggerUtilities Methods
Delete Action Plan Tasks
- deleteTasks (apttIds)
+ futureDeleteTasks (taskIDs)
- Delete Action Plan Tasks related Tasks
+ Delete Action Plan Tasks' related Tasks
@@ -461,7 +468,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L375">
actionsOnTaskBeforeDelete(cTasks)
@@ -487,7 +494,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L272">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L283">
deleteAPTasks(aPTasks)
@@ -501,22 +508,22 @@
Ids of APTasks to delete
-
+
- deleteTasks(apttIds)
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L295">
+ futureDeleteTasks(taskIDs)
- Delete Action Plan Tasks related Tasks
+ Delete Action Plan Tasks' related Tasks
Signature
-
- public static void deleteTasks(Set<Id> apttIds)
+ @future
+ public static void futureDeleteTasks(Set<Id> taskIDs)
Parameters
- apttIds
+ taskIDs
Type: Set<Id>
Task
IDs to delete
@@ -527,7 +534,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L305">
generateDependentTasksAndReset(apTasks, taskIndexToDelete)
@@ -553,7 +560,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L32">
initDependentTaskWork(taskIdMap)
@@ -573,7 +580,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L165">
populateUpdateApttsList(dependentAptList)
@@ -595,7 +602,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L86">
queryDependentAPTaskTemplates(closedTasks)
@@ -611,7 +618,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L266">
updateAPTasksStatus(apTasksMap)
@@ -631,7 +638,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTaskTriggerUtilities.cls#L107">
upsertDependentAPTasks(dependentAptList)
diff --git a/docs/ActionPlansTaskTriggerUtilitiesTest.html b/docs/ActionPlansTaskTriggerUtilitiesTest.html
index b2d6fc19..d472190a 100644
--- a/docs/ActionPlansTaskTriggerUtilitiesTest.html
+++ b/docs/ActionPlansTaskTriggerUtilitiesTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L23">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L23">
ActionPlansTaskTriggerUtilitiesTest
@@ -347,7 +347,14 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansTaskTriggerUtilitiesTest Properties
@@ -363,7 +370,7 @@ ActionPlansTaskTriggerUtilitiesTest Prop
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L24">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L24">
testClosedStatus
@@ -397,6 +404,11 @@ ActionPlansTaskTriggerUtilitiesTest Methods
test ActionPlansTaskTriggerUtilities when the user undeletes an ActionPlan Task Template
+
+ coverFutureMethods ()
+
+ Coverage for future deletion methods because we may not use them
+
makeData ()
@@ -431,7 +443,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L114">
actionPlanDelete()
@@ -447,7 +459,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L229">
aPTaskUndelete()
@@ -463,7 +475,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L151">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L168">
aPTaskUpdate()
@@ -479,7 +491,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L298">
aPTTemplateUndeleteException()
@@ -488,6 +500,22 @@ @IsTest
private static void aPTTemplateUndeleteException()
+
+
+
+ coverFutureMethods()
+
+
+ Coverage for future deletion methods because we may not use them
+ Signature
+ @IsTest
+ private static void coverFutureMethods()
+
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L27">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L27">
makeData()
@@ -510,7 +538,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L55">
taskAfterUpdateToCompleted()
@@ -526,7 +554,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L348">
taskAfterUpdateToOpen()
@@ -542,7 +570,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L477">
taskAssignToQueue()
@@ -561,7 +589,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansTaskTriggerUtilitiesTest.cls#L405">
taskBeforeDelete()
diff --git a/docs/ActionPlansTestUtilities.html b/docs/ActionPlansTestUtilities.html
index f459fb79..e09bc88c 100644
--- a/docs/ActionPlansTestUtilities.html
+++ b/docs/ActionPlansTestUtilities.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L23">
ActionPlansTestUtilities
@@ -343,7 +343,15 @@
Signature
public inherited sharing class ActionPlansTestUtilities
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 Begin exposing methods to cover custom objects
+
ActionPlansTestUtilities Properties
@@ -361,7 +369,7 @@ ActionPlansTestUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L26">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L27">
forceError
@@ -379,7 +387,7 @@ ActionPlansTestUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L31">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L32">
forceHasRecordType
@@ -397,7 +405,7 @@ ActionPlansTestUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L37">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L38">
standardObjects
@@ -437,7 +445,7 @@ ActionPlansTestUtilities Methods
Creates a new Account SObject
Inserts before returning
- createNewActionPlan (relatedObject, numTasks)
+ createNewActionPlan (relatedObject, numTasks, customObjectId)
Create Action Plan and APTaskss
@@ -468,7 +476,7 @@ ActionPlansTestUtilities Methods
createNewCampaign ()
- Creates a new Campaign SObject Inserts before returning
+ Creates a new Campaign SObject
Inserts before returning
createNewCase (insertRecord)
@@ -478,7 +486,7 @@ ActionPlansTestUtilities Methods
createNewCase ()
- Creates a new Case Object Inserts before returning
+ Creates a new Case Object
Inserts before returning
createNewContact (insertRecord)
@@ -488,7 +496,7 @@ ActionPlansTestUtilities Methods
createNewContact ()
- Creates a new Contact Object Inserts before returning
+ Creates a new Contact Object
Inserts before returning
createNewContract (insertRecord)
@@ -498,7 +506,7 @@ ActionPlansTestUtilities Methods
createNewContract ()
- Creates a new Contract Object Inserts before returning
+ Creates a new Contract Object
Inserts before returning
createNewLead (insertRecord)
@@ -508,7 +516,7 @@ ActionPlansTestUtilities Methods
createNewLead ()
- Creates a new Lead Object Inserts before returning
+ Creates a new Lead Object
Inserts before returning
createNewOpportunity (insertRecord)
@@ -518,7 +526,7 @@ ActionPlansTestUtilities Methods
createNewOpportunity ()
- Creates a new Opportunity Object Inserts before returning
+ Creates a new Opportunity Object
Inserts before returning
createRandomWord ()
@@ -566,7 +574,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L118">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L119">
assignAPPermissionSets(testUserId, allOrNone)
@@ -597,7 +605,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L105">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L106">
createAdminUser()
@@ -624,7 +632,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L136">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L137">
createNewAccount(insertRecord)
@@ -646,7 +654,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L151">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L152">
createNewAccount()
@@ -664,14 +672,14 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L318">
- createNewActionPlan(relatedObject, numTasks)
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L325">
+ createNewActionPlan(relatedObject, numTasks, customObjectId)
Create Action Plan and APTaskss
Signature
- public ActionPlan__c createNewActionPlan(String relatedObject, Integer numTasks)
+ public ActionPlan__c createNewActionPlan(String relatedObject, Integer numTasks, Id customObjectId)
Parameters
relatedObject
Type: String
@@ -679,6 +687,9 @@
numTasks
Type: Integer
How many tasks to create for the ActionPlan
+ customObjectId
+ Type: Id
+ For a Custom Object, pass in the Id of the created record so we don't have to do that here
Returns
new ActionPlan__c
See
@@ -687,6 +698,11 @@
>ActionPlansTestUtilities.createNewActionPlanTask
+ Example
+ ActionPlansTestUtilities testUtil = new ActionPlansTestUtilities();
+ ActionPlan__c actionPlan = testUtil.createNewActionPlan('account', 3, null);
+ or
+ ActionPlan__c actionPlan = testUtil.createNewActionPlan('customObject__c', 3, '02a000000000000000');
@@ -695,7 +711,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L379">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L389">
createNewActionPlanTask(actionPlan, days, userId, category, priority)
@@ -733,7 +749,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L414">
createNewActionPlanTemplate(numTasks)
@@ -765,7 +781,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L449">
createNewActionPlanTemplateTask(apTemplate, days, userId, category, priority)
@@ -805,7 +821,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L161">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L162">
createNewCampaign(insertRecord)
@@ -833,11 +849,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L177">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L178">
createNewCampaign()
- Creates a new Campaign SObject Inserts before returning
+ Creates a new Campaign SObject
Inserts before returning
Signature
public Campaign createNewCampaign()
@@ -857,7 +873,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L186">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L187">
createNewCase(insertRecord)
@@ -879,11 +895,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L202">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L203">
createNewCase()
- Creates a new Case Object Inserts before returning
+ Creates a new Case Object
Inserts before returning
Signature
public Case createNewCase()
@@ -897,7 +913,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L211">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L212">
createNewContact(insertRecord)
@@ -919,11 +935,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L226">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L227">
createNewContact()
- Creates a new Contact Object Inserts before returning
+ Creates a new Contact Object
Inserts before returning
Signature
public Contact createNewContact()
@@ -937,7 +953,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L235">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L236">
createNewContract(insertRecord)
@@ -959,11 +975,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L252">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L253">
createNewContract()
- Creates a new Contract Object Inserts before returning
+ Creates a new Contract Object
Inserts before returning
Signature
public Contract createNewContract()
@@ -977,7 +993,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L261">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L262">
createNewLead(insertRecord)
@@ -999,11 +1015,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L279">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L280">
createNewLead()
- Creates a new Lead Object Inserts before returning
+ Creates a new Lead Object
Inserts before returning
Signature
public Lead createNewLead()
@@ -1017,7 +1033,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L289">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L290">
createNewOpportunity(insertRecord)
@@ -1045,11 +1061,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L307">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L308">
createNewOpportunity()
- Creates a new Opportunity Object Inserts before returning
+ Creates a new Opportunity Object
Inserts before returning
Signature
public Opportunity createNewOpportunity()
@@ -1069,7 +1085,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L44">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L45">
createRandomWord()
@@ -1089,7 +1105,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L55">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L56">
createRandomWord(prefix)
@@ -1116,7 +1132,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L67">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L68">
createTestUser()
@@ -1138,7 +1154,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L81">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L82">
createTestUser(p)
@@ -1160,7 +1176,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L486">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L496">
getCompleted(actionPlanId)
@@ -1182,7 +1198,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTestUtilities.cls#L472">
getNonDefaultAvailableTaskRecordType()
diff --git a/docs/ActionPlansTriggerHandlers.html b/docs/ActionPlansTriggerHandlers.html
index de937335..af129c59 100644
--- a/docs/ActionPlansTriggerHandlers.html
+++ b/docs/ActionPlansTriggerHandlers.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L22">
ActionPlansTriggerHandlers
@@ -346,7 +346,14 @@
Signature
global without sharing class ActionPlansTriggerHandlers
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+
ActionPlansTriggerHandlers Properties
@@ -364,7 +371,7 @@ ActionPlansTriggerHandlers Properties
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L29">
bypassTaskTrigger
@@ -416,6 +423,11 @@ ActionPlansTriggerHandlers Methods
Related Record
fields
+
+ forceSynchronous ()
+
+ Simple method to check if we are asynchronous already
+
futureDeleteActionPlans (relActionPlansIds)
@@ -486,7 +498,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L37">
actionPlansSObjectTriggerHandler(sObjectName)
@@ -516,7 +528,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L53">
actionPlansSObjectTriggerHandler(newRecords, oldRecords, newRecordsMap, oldRecordsMap, triggerEvent, sObjectName)
@@ -564,7 +576,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L822">
allowChangeParentStatus(apTaskTemplateIds)
@@ -591,7 +603,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L821">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L837">
deleteActionPlans(relActionPlansIds)
@@ -615,7 +627,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L226">
fillRelatedRecordFields(newRecords)
@@ -635,6 +647,28 @@ David Schach
+
+
+
+ forceSynchronous()
+
+
+ Simple method to check if we are asynchronous already
+ Signature
+
+ private static Boolean forceSynchronous()
+ Returns
+ Boolean
Are we in an asynchronous state (so can't call future methods)?
+ Author
+
+ David Schach
+
+
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L859">
futureDeleteActionPlans(relActionPlansIds)
@@ -670,7 +704,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L781">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L797">
getRelationshipName(recordId)
@@ -692,7 +726,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L131">
triggerhandlerActionPlan(newRecords, oldRecords, newRecordsMap, oldRecordsMap, triggerEvent)
@@ -726,10 +760,7 @@ ActionPlansTriggerHandlers.validateActionPlans,
- ActionPlansTaskTriggerUtilities.deleteTasks
+ >, ActionPlansTaskTriggerUtilities.deleteTasks
Author
@@ -743,7 +774,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L694">
triggerhandlerActionPlanAccount(newRecords, oldRecords, newRecordsMap, oldRecordsMap, triggerEvent)
@@ -782,7 +813,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L637">
triggerhandlerActionPlanLead(newRecords, oldRecords, newRecordsMap, oldRecordsMap, triggerEvent)
@@ -819,7 +850,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L261">
triggerhandlerActionPlanTask(newRecords, oldRecords, newRecordsMap, oldRecordsMap, triggerEvent)
@@ -858,7 +889,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L379">
triggerhandlerActionPlanTemplate(newRecords, oldRecords, oldRecordsMap, triggerEvent)
@@ -894,7 +925,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L416">
triggerhandlerActionPlanTemplateTask(newRecords, oldRecords, oldRecordsMap, triggerEvent)
@@ -930,7 +961,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L452">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L468">
triggerhandlerTask(newRecords, oldRecords, triggerEvent)
@@ -966,7 +997,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L757">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansTriggerHandlers.cls#L773">
validateActionPlans(actionPlans)
diff --git a/docs/ActionPlansUtilities.html b/docs/ActionPlansUtilities.html
index 53f6ded7..080919ed 100644
--- a/docs/ActionPlansUtilities.html
+++ b/docs/ActionPlansUtilities.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L18">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L18">
ActionPlansUtilities
@@ -343,7 +343,14 @@
Signature
public without sharing class ActionPlansUtilities
-
David Schach
2022
+ Since
+
+ 2022
+
+ Author
+
+ David Schach
+
ActionPlansUtilities Properties
@@ -361,7 +368,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L69">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L69">
apCustomRelationshipFields
@@ -378,7 +385,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L567">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L581">
apSettings
@@ -395,7 +402,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L529">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L537">
canDisplayReminder
@@ -403,7 +410,7 @@ ActionPlansUtilities Properties
private static Boolean canDisplayReminder
-
+ Private variable to store if the org can have reminders available
@@ -412,7 +419,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L545">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L556">
checkReminderByDefault
@@ -420,7 +427,7 @@ ActionPlansUtilities Properties
private static Boolean checkReminderByDefault
-
+ Does the running user get task reminders by default?
@@ -429,7 +436,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L363">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L368">
closedTaskStatuses
@@ -446,7 +453,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L670">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L680">
dayOfWeekEnglish
@@ -463,7 +470,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L562">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L576">
defaultMinutesForReminderTime
@@ -471,7 +478,7 @@ ActionPlansUtilities Properties
private static String defaultMinutesForReminderTime
-
+ What is the default time for the user's reminders
@@ -480,7 +487,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L32">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L32">
MASTER_RECORD_TYPE_ID
@@ -497,7 +504,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L22">
MAX_APTASKS
@@ -514,7 +521,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L27">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L27">
MAX_APTODELETE
@@ -531,7 +538,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L732">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L742">
namespacePrefix
@@ -548,7 +555,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L358">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L349">
openTaskStatuses
@@ -565,7 +572,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L118">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L119">
prefixToDescribe
@@ -573,7 +580,7 @@ ActionPlansUtilities Properties
private static Map<String, Schema.DescribeSObjectResult> prefixToDescribe
- Memoize objects as we describe them, to save on calls
+ Memoize objects as we describe them, to save on calls
This map is keyprefix => DescribeSObjectResult
@@ -582,7 +589,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L140">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L141">
recordIdToRecordName
@@ -590,7 +597,7 @@ ActionPlansUtilities Properties
private static Map<Id, String> recordIdToRecordName
- Memoize record IDs so we don't have to keep iterating over them if we already have them
+ Memoize record IDs to Names so we don't have to keep iterating over them if we already have them
@@ -599,12 +606,12 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L275">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L279">
taskPriorityDefaultValue
- private static String taskPriorityDefaultValue
+ private static final String taskPriorityDefaultValue
Describe Task.Priority
only once
@@ -616,7 +623,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L279">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L283">
taskRecordTypePriorityDefaultValues
@@ -633,7 +640,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L197">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L201">
taskRecordTypes
@@ -650,7 +657,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L218">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L222">
taskRecordTypeStatusDefaultValues
@@ -667,7 +674,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L249">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L253">
taskRecordTypeTypeDefaultValues
@@ -684,7 +691,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L340">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L344">
taskRTs
@@ -701,12 +708,12 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L214">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L218">
taskStatusDefaultValue
- private static String taskStatusDefaultValue
+ private static final String taskStatusDefaultValue
Describe Task.Status
only once
@@ -718,12 +725,12 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L245">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L249">
taskTypeDefaultValue
- private static String taskTypeDefaultValue
+ private static final String taskTypeDefaultValue
Describe Task.Type
only once
@@ -735,7 +742,7 @@ ActionPlansUtilities Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L37">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L37">
taskUsesRecordTypes
@@ -926,7 +933,10 @@ ActionPlansUtilities Methods
queryRecordIDToRecordName (recordIDs)
- Give a set of recordIDs and retrieve the related record names
+
+ Give a set of recordIDs and retrieve the related record names
This method has queries in a loop - need to investigate if it is even possible to call
+ this method with IDs from multiple objects
+
@@ -936,7 +946,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L612">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L626">
actionPlanSubjectToName(subject)
@@ -958,7 +968,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L622">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L636">
actionPlanSubjectToName(subject, maxChars)
@@ -983,7 +993,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L697">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L707">
adjustTaskDueDate(actionPlanStartDate, taskDaysFromStart, apSkipDay)
@@ -1011,7 +1021,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L639">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L651">
canSendEmails()
@@ -1031,7 +1041,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L499">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L504">
canShareRecord(recordId, recordOwnerId)
@@ -1062,7 +1072,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L592">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L606">
checkOrgDefaultCustomSetting(insertIfNull)
@@ -1091,7 +1101,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L523">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L528">
getCanDisplayReminder()
@@ -1112,7 +1122,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L486">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L491">
getCanTransfer(recordId)
@@ -1138,7 +1148,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L535">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L543">
getCheckReminderByDefault()
@@ -1158,7 +1168,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L369">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L374">
getClosedTaskStatuses()
@@ -1180,7 +1190,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L75">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L75">
getCustomRelationshipFields()
@@ -1202,7 +1212,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L572">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L586">
getCustomSetting()
@@ -1220,7 +1230,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L661">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L671">
getDayOfWeek(theDate)
@@ -1246,7 +1256,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L551">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L562">
getDefaultReminderMinutes()
@@ -1264,7 +1274,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L308">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L312">
getDefaultTaskRecordTypeId()
@@ -1282,7 +1292,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L472">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L477">
getEscapedPageParameter(paramKey)
@@ -1313,7 +1323,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L387">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L392">
getFieldOptions(objectname, fieldname, requireValue)
@@ -1345,7 +1355,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L411">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L416">
getHoursOption()
@@ -1363,7 +1373,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L724">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L734">
getIsLex()
@@ -1381,7 +1391,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L110">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L110">
getObjectKeyPrefix(objName)
@@ -1406,7 +1416,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L346">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L355">
getOpenTaskStatuses()
@@ -1424,7 +1434,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L125">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L126">
getRelatedSObjectDescribe(recordId)
@@ -1452,7 +1462,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L288">
getTaskRecordTypePriorityDefaultValues()
@@ -1473,7 +1483,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L203">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L207">
getTaskRecordTypes()
@@ -1493,7 +1503,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L227">
getTaskRecordTypeStatusDefaultValues()
@@ -1513,7 +1523,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L258">
getTaskRecordTypeTypeDefaultValues()
@@ -1534,7 +1544,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L327">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L331">
getTaskRTPicklistValues()
@@ -1552,7 +1562,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L686">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L696">
getWeekendDay(developerName)
@@ -1578,7 +1588,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L750">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L760">
idStartsWith(idParam, compareString)
@@ -1605,7 +1615,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L59">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L59">
onPageLoad()
@@ -1630,11 +1640,14 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L148">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/ActionPlansUtilities.cls#L151">
queryRecordIDToRecordName(recordIDs)
- Give a set of recordIDs and retrieve the related record names
+
+ Give a set of recordIDs and retrieve the related record names
This method has queries in a loop - need to investigate if it is even possible to call this
+ method with IDs from multiple objects
+
Signature
public static Map<Id, String> queryRecordIDToRecordName(Set<Id> recordIDs)
diff --git a/docs/ActionPlansUtilitiesTest.html b/docs/ActionPlansUtilitiesTest.html
index 370517bb..0b5c9c97 100644
--- a/docs/ActionPlansUtilitiesTest.html
+++ b/docs/ActionPlansUtilitiesTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L18">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L19">
ActionPlansUtilitiesTest
@@ -346,7 +346,15 @@
-
David Schach
2022
+ Author
+
+ David Schach
+
+ Since
+
+ 2022
+ 2023 System.assert to Assert class + error messages
+
ActionPlansUtilitiesTest Methods
@@ -375,6 +383,8 @@ ActionPlansUtilitiesTest Methods
doChatterPost (objectNames)
+
+ A method to enable testing creating a Chatter post for any of our usual standard objects
doChatterPostPart1 ()
@@ -394,6 +404,8 @@ ActionPlansUtilitiesTest Methods
makeData ()
+
+ Set up custom settings
randomWord ()
@@ -407,10 +419,13 @@ ActionPlansUtilitiesTest Methods
saveSingle ()
-
- testObject (objectName)
+
+ testObject (objectName, recordId)
- Pass in any object and create an Action Plan for that object
+
+ Pass in any object name (and its ID if a custom object) and create an Action Plan for that object
Will be global in the next version so test code for
+ custom objects can access it
+
utilitiesRecordTypes ()
@@ -423,7 +438,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L94">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L98">
account()
@@ -438,7 +453,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L127">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L131">
campaign()
@@ -453,7 +468,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L169">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L175">
cancel()
@@ -468,7 +483,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L122">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L126">
case()
@@ -483,7 +498,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L104">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L108">
contact()
@@ -498,7 +513,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L132">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L136">
contract()
@@ -513,7 +528,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L251">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L257">
deleteActionPlans()
@@ -528,13 +543,18 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L279">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L290">
doChatterPost(objectNames)
+ A method to enable testing creating a Chatter post for any of our usual standard objects
Signature
private static void doChatterPost(List<String> objectNames)
+ Parameters
+ objectNames
+ Type: List<String>
+ The object we want to make a post for
@@ -543,7 +563,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L354">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L365">
doChatterPostPart1()
@@ -558,7 +578,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L362">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L373">
doChatterPostPart2()
@@ -573,7 +593,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L117">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L121">
lead()
@@ -588,7 +608,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L397">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L408">
makeAppTask(ap)
@@ -616,10 +636,11 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L20">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L24">
makeData()
+ Set up custom settings
Signature
@TestSetup
private static void makeData()
@@ -631,7 +652,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L369">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L380">
randomWord()
@@ -646,7 +667,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L224">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L230">
relatedObjectId()
@@ -661,7 +682,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L64">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L68">
saveMultiple()
@@ -676,7 +697,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L32">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L36">
saveSingle()
@@ -684,25 +705,31 @@
@IsTest
private static void saveSingle()
-
+
- testObject(objectName)
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L148">
+ testObject(objectName, recordId)
- Pass in any object and create an Action Plan for that object
+
+ Pass in any object name (and its ID if a custom object) and create an Action Plan for that object
Will be global in the next version so test code for
+ custom objects can access it
+
Signature
- private static Boolean testObject(String objectName)
+ public static Boolean testObject(String objectName, Id recordId)
Parameters
objectName
Type: String
The object name
+ recordId
+ Type: Id
+ Pass in the Id of a custom object record so we can make an Action Plan for it
Returns
Success at creating tasks for the Action Plan
Author
@@ -717,7 +744,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/ActionPlansUtilitiesTest.cls#L375">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/ActionPlansUtilitiesTest.cls#L386">
utilitiesRecordTypes()
diff --git a/docs/CanTheUser.html b/docs/CanTheUser.html
index 6fceaaa3..c348718b 100644
--- a/docs/CanTheUser.html
+++ b/docs/CanTheUser.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L16">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L16">
CanTheUser
A reusable, intuitive library for determining wether or not the current use can create, read, edit, or delete objects as well as determining if the user has access
- or update permissions on specific fields. This class name was chosen to facilitate easy-to-understand and read code. Whenever you need to check FLS or CRUD access
- your code reads like this if(CanTheUser.read(new account())){}
making the calling and use of this code easy and intuitive. Taken
- from Codefriar code.
+ or update permissions on specific fields.
This class name was chosen to facilitate easy-to-understand and read code. Whenever you need to check FLS or CRUD
+ access your code reads like this if(CanTheUser.read(new account())){}
making the calling and use of this code easy and intuitive.
+ Taken from Codefriar code.
Signature
@@ -353,7 +353,14 @@
https://github.com/codefriar/CanTheUser,
https://github.com/trailheadapps/apex-recipes
-
Codefriar
2021
+ Author
+
+ Codefriar
+
+ Since
+
+ 2021
+
CanTheUser Properties
@@ -371,7 +378,7 @@ CanTheUser Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L18">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L18">
accessibleFieldsByObject
@@ -391,7 +398,7 @@ CanTheUser Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L41">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L47">
memoizedFLSResults
@@ -412,7 +419,7 @@ CanTheUser Properties
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L20">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L20">
updatableFieldsByObject
@@ -434,6 +441,7 @@ Enums
Name
Signature
Values
+ Description
@@ -442,7 +450,7 @@ Enums
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L22">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L25">
CrudType
@@ -450,6 +458,8 @@ Enums
public enum CrudType
CREATEABLE, READABLE, EDITABLE, DELETABLE, UPSERTABLE
+
+ The major database actions are insert, read, update, delete, and upsert. Undelete is not considered here.
@@ -458,7 +468,7 @@ Enums
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L30">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L36">
FLSType
@@ -466,6 +476,8 @@ Enums
public enum FLSType
ACCESSIBLE, UPDATABLE
+
+ If a field is not accessible (invisible) it cannot be updatable. If it is accessible, it may or may not be updatable.
@@ -506,16 +518,17 @@ CanTheUser Methods
crud (obj, permission)
-
- This class' name was chosen to facilitate easy-to-understand and read code. Whenever you need to check FLS or CRUD access your code reads like this
- if(CanTheUser.read(new account())){}
making the calling and use of this code easy and intuitive.
-
+ Main crud method checks an object for a specific permission
crud (objs, permission)
+
+ MaSecondaryin crud method checks a "list" of SObjects for a specific permission
crud (objectName, permission)
+
+ MaSecondaryin crud method checks a "list" of SObjects for a specific permission
destroy (obj)
@@ -600,7 +613,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L293">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L307">
bulkFLSAccessible(obj, fields)
@@ -628,7 +641,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L324">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L338">
bulkFLSUpdatable(obj, fields)
@@ -656,7 +669,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L353">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L367">
calculateFLS(objType)
@@ -680,7 +693,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L104">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L118">
create(obj)
@@ -706,7 +719,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L115">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L129">
create(objs)
@@ -730,7 +743,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L127">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L141">
create(objName)
@@ -755,17 +768,25 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L60">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L58">
crud(obj, permission)
-
- This class' name was chosen to facilitate easy-to-understand and read code. Whenever you need to check FLS or CRUD access your code reads like this
- if(CanTheUser.read(new account())){}
making the calling and use of this code easy and intuitive.
-
+ Main crud method checks an object for a specific permission
Signature
- @testVisible
+
private static Boolean crud(SObject obj, CrudType permission)
+ Parameters
+ obj
+ Type: SObject
+ the object type to check
+ permission
+ Type: CrudType
+ create, read, update or delete
+ Returns
+ Boolean
Is the action possible?
+ Example
+ System.debug(CanTheUser.crud(new Account(), CanTheUser.CrudType.READABLE));
@@ -774,13 +795,25 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L85">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L91">
crud(objs, permission)
+ MaSecondaryin crud method checks a "list" of SObjects for a specific permission
Signature
- @testVisible
+
private static Boolean crud(List<SObject> objs, CrudType permission)
+ Parameters
+ objs
+ Type: List<SObject>
+ a list of SObjects, but we only check the first one
+ permission
+ Type: CrudType
+ create, read, update or delete
+ Returns
+ Boolean
Is the action possible?
+ Example
+ System.debug(CanTheUser.crud(new Account(), CanTheUser.CrudType.READABLE));
@@ -789,13 +822,25 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L90">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L104">
crud(objectName, permission)
+ MaSecondaryin crud method checks a "list" of SObjects for a specific permission
Signature
- @testVisible
+
private static Boolean crud(String objectName, CrudType permission)
+ Parameters
+ objectName
+ Type: String
+ the object name; we will find the type from this
+ permission
+ Type: CrudType
+ create, read, update or delete
+ Returns
+ Boolean
Is the action possible?
+ Example
+ System.debug(CanTheUser.crud(new Account(), CanTheUser.CrudType.READABLE));
@@ -804,7 +849,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L244">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L258">
destroy(obj)
@@ -830,7 +875,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L254">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L268">
destroy(objs)
@@ -853,7 +898,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L266">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L280">
destroy(objName)
@@ -878,7 +923,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L175">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L189">
edit(obj)
@@ -904,7 +949,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L185">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L199">
edit(objs)
@@ -927,7 +972,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L197">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L211">
edit(objName)
@@ -952,7 +997,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L280">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L294">
flsAccessible(obj, field)
@@ -985,7 +1030,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L311">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L325">
flsUpdatable(obj, field)
@@ -1018,7 +1063,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L340">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L354">
getFLSForFieldOnObject(obj, field, checkType)
@@ -1048,7 +1093,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L139">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L153">
read(obj)
@@ -1074,7 +1119,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L151">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L165">
read(objs)
@@ -1099,7 +1144,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L163">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L177">
read(objName)
@@ -1124,7 +1169,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L209">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L223">
ups(obj)
@@ -1150,7 +1195,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L220">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L234">
ups(objs)
@@ -1173,7 +1218,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L232">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/CanTheUser.cls#L246">
ups(objName)
diff --git a/docs/CanTheUserTest.html b/docs/CanTheUserTest.html
index f19e2698..874468d5 100644
--- a/docs/CanTheUserTest.html
+++ b/docs/CanTheUserTest.html
@@ -177,7 +177,7 @@
onclick="goToLocation('ActionPlansQueueableBuilderTest.html');">
ActionPlansQueueableBuilderTest
-
+
ActionPlansRedirectTest
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L16">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L16">
CanTheUserTest
@@ -349,7 +349,14 @@
https://github.com/trailheadapps/apex-recipes,
CanTheUser
-
Codefriar
2021
+ Author
+
+ Codefriar
+
+ Since
+
+ 2021
+
CanTheUserTest Methods
@@ -384,6 +391,10 @@ CanTheUserTest Methods
generateAccounts ()
+
+
+ These tests rely on the assumption that standard FLS/CRUD have not been modified by the user, and use the Account Object for verification of the Can Logic.
+
getBulkFLSAccessibleWithAccountPositive ()
@@ -415,7 +426,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L29">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L34">
canCrudAccountCreatePositive()
@@ -430,7 +441,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L84">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L89">
canCrudAccountDeletePositive()
@@ -445,7 +456,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L51">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L56">
canCrudAccountReadPositive()
@@ -460,7 +471,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L64">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L69">
canCrudAccountUpdatePositive()
@@ -475,7 +486,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L41">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L46">
canCrudCreateAccountPositive()
@@ -490,7 +501,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L91">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L96">
canCrudDestroyAccountPositive()
@@ -505,7 +516,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L70">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L75">
canCrudEditAccountPositive()
@@ -520,7 +531,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L57">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L62">
canCrudReadAccountPositive()
@@ -535,7 +546,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L77">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L82">
canCrudUpsertAccountPositive()
@@ -550,13 +561,18 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L20">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L25">
generateAccounts()
+
+ These tests rely on the assumption that standard FLS/CRUD have not been modified by the user, and use the Account Object for verification of the Can Logic.
+
Signature
private static List<Account> generateAccounts()
+ Returns
+ List<Account>
Sample created Accounts (currently hard-coded to 2)
@@ -565,7 +581,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L113">
getBulkFLSAccessibleWithAccountPositive()
@@ -580,7 +596,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L122">
getBulkFLSAccessibleWithAccountPositiveWithNegativeResults()
@@ -595,7 +611,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L131">
getBulkFLSUpdatableWithAccountPositive()
@@ -610,7 +626,7 @@
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L140">
getBulkFLSUpdatableWithAccountPositiveWithNegativeResults()
@@ -625,7 +641,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L103">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L108">
getFLSofAccountIDNegative()
@@ -640,7 +656,7 @@
rel="noopener noreferrer"
title="Go to source"
class="source-link"
- href="https://github.com/SalesforceLabs/ActionPlansV4/tree/main/sfdx-source/LabsActionPlans/main/default/tests/CanTheUserTest.cls#L98">
+ href="https://github.com/SalesforceLabs/ActionPlansV4/blob/main/sfdx-source/LabsActionPlans/main/default/classes/tests/CanTheUserTest.cls#L103">
getFLSofAccountNamePositive()
diff --git a/docs/assets/highlight.js b/docs/assets/highlight.js
index 9491f128..c65744b2 100644
--- a/docs/assets/highlight.js
+++ b/docs/assets/highlight.js
@@ -1,5 +1,5 @@
/*!
- Highlight.js v11.6.0 (git: bed790f3f3)
+ Highlight.js v11.7.0 (git: 82688fad18)
(c) 2006-2022 undefined and other contributors
License: BSD-3-Clause
*/
@@ -299,7 +299,7 @@ e["before:highlightBlock"](Object.assign({block:n.el},n))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{
e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}
}),n.debugMode=()=>{s=!1},n.safeMode=()=>{s=!0
-},n.versionString="11.6.0",n.regex={concat:m,lookahead:g,either:p,optional:b,
+},n.versionString="11.7.0",n.regex={concat:m,lookahead:g,either:p,optional:b,
anyNumberOfTimes:u};for(const n in T)"object"==typeof T[n]&&e.exports(T[n])
;return Object.assign(n,T),n})({});const te=e=>({IMPORTANT:{scope:"meta",
begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{
@@ -326,8 +326,9 @@ end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
const t=e[0].length+e.index,a=e.input[t]
;if("<"===a||","===a)return void n.ignoreMatch();let i
;">"===a&&(((e,{after:n})=>{const t=""+e[0].slice(1)
-;return-1!==e.input.indexOf(t,n)})(e,{after:t
-})||n.ignoreMatch()),(i=e.input.substring(t).match(/^\s+extends\s+/))&&0===i.index&&n.ignoreMatch()
+;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch())
+;const r=e.input.substring(t)
+;((i=r.match(/^\s*=/))||(i=r.match(/^\s+extends\s+/))&&0===i.index)&&n.ignoreMatch()
}},i={$pattern:be,keyword:me,literal:pe,built_in:ye,"variable.language":Ee
},r="\\.([0-9](_?[0-9])*)",s="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",o={
className:"number",variants:[{
@@ -348,9 +349,9 @@ begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)",
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]
-},b=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,o];l.contains=b.concat({
-begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(b)})
-;const m=[].concat(u,l.contains),p=m.concat([{begin:/\(/,end:/\)/,keywords:i,
+},b=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,{match:/\$\d+/},o]
+;l.contains=b.concat({begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(b)
+});const m=[].concat(u,l.contains),p=m.concat([{begin:/\(/,end:/\)/,keywords:i,
contains:["self"].concat(m)}]),_={className:"params",begin:/\(/,end:/\)/,
excludeBegin:!0,excludeEnd:!0,keywords:i,contains:p},h={variants:[{
match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")],
@@ -361,7 +362,7 @@ className:"title.class",keywords:{_:[..._e,...he]}},E={variants:[{
match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[_],
illegal:/%/},y={
-match:n.concat(/\b/,(w=[...fe,"super"],n.concat("(?!",w.join("|"),")")),t,n.lookahead(/\(/)),
+match:n.concat(/\b/,(w=[...fe,"super","import"],n.concat("(?!",w.join("|"),")")),t,n.lookahead(/\(/)),
className:"title.function",relevance:0};var w;const N={
begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},v={
@@ -375,8 +376,8 @@ PARAMS_CONTAINS:p,CLASS_REFERENCE:f},illegal:/#(?![$_A-z])/,
contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
label:"use_strict",className:"meta",relevance:10,
begin:/^\s*['"]use (strict|asm)['"]/
-},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,u,o,f,{className:"attr",
-begin:t+n.lookahead(":"),relevance:0},k,{
+},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,u,{match:/\$\d+/},o,f,{
+className:"attr",begin:t+n.lookahead(":"),relevance:0},k,{
begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
keywords:"return throw case",relevance:0,contains:[u,e.REGEXP_MODE,{
className:"function",begin:O,returnBegin:!0,end:"\\s*=>",contains:[{
@@ -402,7 +403,7 @@ begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/,
-contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$\(\(/,
+contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/,
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
@@ -602,7 +603,7 @@ contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{
begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)),
className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{
const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+ue("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={
-keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],
+keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"],
literal:["false","true","null"],
type:["char","boolean","long","float","int","byte","short","double"],
built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{
@@ -759,9 +760,9 @@ begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[],
-variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},i={
-className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{
-begin:/_(?!_)/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[]
+variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]
+},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{
+begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[]
}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r)
;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o)
})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
@@ -957,19 +958,20 @@ match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{
match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`",
contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{
const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={
-"variable.constant":["__FILE__","__LINE__"],
+"variable.constant":["__FILE__","__LINE__","__ENCODING__"],
"variable.language":["self","super"],
-keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],
-built_in:["proc","lambda"],literal:["true","false","nil"]},s={
-className:"doctag",begin:"@[A-Za-z]+"},o={begin:"#<",end:">"
-},l=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^=begin","^=end",{
-contains:[s],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={
-className:"subst",begin:/#\{/,end:/\}/,keywords:r},d={className:"string",
-contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
-},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,
-end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{
-begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,
-end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
+keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],
+built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],
+literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={
+begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s]
+}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10
+}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/,
+end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c],
+variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{
+begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{
+begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{begin:/%[qQwWx]?\//,
+end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{
+begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
@@ -984,9 +986,11 @@ begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{
className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,
keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{
-match:[/class\s+/,i]}],scope:{2:"title.class",4:"title.class.inherited"},
-keywords:r},{relevance:0,match:[i,/\.new[ (]/],scope:{1:"title.class"}},{
-relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{
+match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",
+4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{
+2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{
+1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{
match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{
begin:e.IDENT_RE+"::"},{className:"symbol",
begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
diff --git a/docs/assets/search-idx.js b/docs/assets/search-idx.js
index b4c93989..6d54f3da 100644
--- a/docs/assets/search-idx.js
+++ b/docs/assets/search-idx.js
@@ -2,196 +2,206 @@ export default [
{
"title": "Home",
"fileName": "index.html",
- "text": "Home Action Plans Changelog Action Plans Installation and Setup Please follow installation instructions, shown on the Installation page AppExchange AppExchange Listing Post-intall extras Scratch Org Developer Edition / Sandbox Apex Code Documentation About Action Plans Action Plans helps your organization encapsulate best practices into easily sharable, reusable task templates. You can create Action Plans for the following objects: Accounts Contacts Leads Opportunities Campaigns Contracts Cases Person Accounts Custom Objects Getting Help Action Plans is unsupported. For community assistance with Action Plans, please visit Salesforce Trailblazer Community . To submit ideas or issues, please visit Action Plans on Github . Community Action Plans is open source software. We welcome your issue reports, ideas, documentation, code tweaks and all other participation. Learn more . Features: Export and share your Action Plan Templates with other orgs. Import Action Plan Templates. Supports Task reminder times. Action Plans Settings controls behavior around Chatter Notifications, actions when a Lead is converted, and default Task assignment behavior Invocable Apex allows automatic Action Plan creation from a Template in Process Builder and Flow Post Install Configuration Getting started is easy. For each object, you need to add a button to the list view, add a button to the detail page. For Accounts, follow these steps:\" Update Action Plans Custom Settings Change these setting by editing Action Plan Settings, and updating values at either the organization level, profile levels, or user levels. Navigate to Setup > Develop > Custom Settings. Click on 'Manage' next to Action Plans Settings . Click the 'New' button near 'Default Organizational Level Value'. Check the values that you want to enable. Enable Chatter Post places a post in the related record's Chatter Feed(if Chatter is enabled for that object). If unchecked, Action Plans does not create a Feed Post. Unassigned Task Defaults to Record Owner ensures that Action Plan Template tasks with a blank 'Assigned To' field go to the related record's owner. If unchecked, tasks with a blank 'Assigned To' field are assigned to the running user. Tasks can be assigned to specific people on Action Plan Templates, which overrides this setting. Default Object on Lead Conversion specifies that if an Action Plan is related to a Lead, whether the Action Plan should be moved to the converted Account, Contact, or Opportunity when the Lead is converted. The default is Contact. Action Plans Business Hours ID and Use Business Hours are reserved for future functionality. Weekends: Custom Metadata Modify Custom Metadata Weekend Day to indicate which days of the week are the weekend and how many days to move a task forward or backwards to move it to the end of the previous week or the start of the next week. This allows you to work with a different weekend, or to avoid assigning any task to be due on any specific day of the week.All weekdays should have 0 in both numeric fields. Update Your Page & Search Layout Configurations Create Action Plans Buttons For each object, you need to add a button to the list view, For Accounts, follow these steps: Navigate to Setup > Object Manager > Account > Search Layouts for Salesforce Classic Click on \"Edit\" from the menu near \"List View.\" Move the \"Create Account Action Plans\" button from \"Available Buttons\" to \"Selected Buttons.\" Click \"Save.\" Navigate to Setup > Object Manager > Account > Page Layouts. Note: the package includes a default \"Action Plan Layout\" for your reference. You do not need to use it. Click on \"Edit\" near one of your standard Account Page Layouts. Add \"Action Plans\" related list to the page. Edit the properties of the related list by clicking the configuration button above it. Expand \"Buttons\" section, clear the \"New\" checkbox and move \"Create Account Action Plan\" to the Selected buttons. Update the fields in the related list to meet your needs. Recommended fields include Start Date, Action Plan Status, Action Plan Template, Plan Start Date. Click \"Save.\" Repeat these steps for the other standard objects Action Plans supports: Contacts, Leads, Opportunities, etc. Delete Action Plans Buttons Follow this steps for Action Plan Object: Navigate to Setup > Object Manager > Action Plan > Search Layouts. Click on \"Edit\" near \"List View.\" Move the \"Delete Action Plans\" button from \"Available Buttons\" to \"Selected Buttons.\" Click \"Save.\" Task Layout Optionally, add the \"Action Plan Task\" field to your Task page layout, but it should be Read-Only , as clearing this field will break the ability to track Action Plan progress. Security Update Your Org-Wide Default Sharing Settings Action Plans includes two shareable objects: Action Plan and Action Plan Template . You may configure your sharing settings in whatever way works for your organization. If you want anyone to be able to create and see plans and their templates, use Public Read/Write for Action Plan and Action Plan Template. If you want anyone to be able to see Action Plans and Templates without being able to change them, select \"Public Read Only.\" If your Org-Wide Default sharing settings are set to Private for Action Plan or Action Plan Template, you may need to implement custom automation to share Action Plan records with the appropriate people. You may do this via Apex sharing, or you may use other automation, to assign ownership of the Action Plan itself to the related record owner or any desired user. To use Action Plans, most users require access only to Tasks . They can be assigned Tasks without knowing that these Tasks are part of an Action Plan. Any changes they make to a Task's Status will be reflected in the related Action Plan Task Template record automatically. No Permission Set is required. Use Permission Sets For Security Assign the appropriate Permission Set(s) to each user who will need to use Action Plans: Action Plans Admin: Full permissions for Action Plans, Action Plan Templates, AP Tasks and APT Task Templates. Action Plans Template Creator: Full permissions for Action Plan Templates and AP Template Tasks. No Action Plan access. Action Plans Creator: Read, Create, Edit, Delete for Action Plans and AP Tasks. Read-only for Action Plan Templates and APT Task Templates. Action Plans Import/Export: Access to export and import Action Plan Template records. View the appropriate button for export and tab for import. Action Plans User: Read-only for Action Plans and AP Tasks. Uses for each Permission Set: Some users may require visibility into the Action Plans related to those Tasks. These users need the Action Plans User Permission Set. It gives Read-only access to Action Plan. Some users may need to create Action Plans from Templates but not edit the templates themselves. The Action Plans Creator Permission Set gives read-only access to Action Plan Templates, and Read, Create, Edit, and Delete access to Action Plans. Users who can create and edit Action Plan Templates require the Action Plans Template Creator Permission Set. This includes permission to Read, Create, Edit, and Delete all Action Plan Templates only. It does not include any Action Plan or Task permissions. If these users require Action Plan access, other Permission Sets should be used as well. A custom permission allows exporting of Action Plan Templates. Intended as an add-on for Action Plans Template Creator , the Action Plans Import/Export permission set allows the viewing of the Export button on Template detail pages and to the Import tab. The custom permission Action Plan Template Export allows exporting of Action Plan Templates and associated tasks. Use this permission with care, as it is a potential security hole for your org's proprietary templates. This is a great way to move templates from a Sandbox to Production org. Action Plans Admin includes Modify All permissions for all four Action Plan objects(Action Plan, Action Plan Task Template, Action Plan Template, and Action Plan Template Task Template). The custom permission allows exporting Action Plan Templates. Note: The Apex used in Flows or via triggers does not require special permissions to run. Using Action Plans with Custom Objects To Start Using an Object with Action Plans Create the object and be sure to check \"Track Activities\" for the object attrributes Create a lookup field from Action Plan to the object. Name the field the same as the object name. The field label can be anything. As an example, if you have a custom object named MyObject__c , you must name the field on Action Plan MyObject__c Add the field to the Related Objects fieldset on Action Plan. The related object will now be available for selection when creating a new Action Plan and relating it to an object. Add the following code to the object trigger in before delete and after undelete contexts(removing the LabsActionPlans namespace if you're not using the managed package:LabsActionPlans.ActionPlansTriggerHandlers.actionPlansSObjectTriggerHandler( 'Custom_Object__c' ); Adding a New Custom Object Action Plan button to the Action Plan object While Action Plans already overrides the New Action Plan action, the New button will show a new Action Plan screen, but will not allow adding an existing template.(Perhaps this will be in a future release... safe harbor.) Create a custom button with the following format on the Action Plan object and add it to the related list on the custom object page layout: Navigate to Setup > Object Manager > Action Plan > Buttons, Links, and Actions > New Button or Link Give it a label and name, such as \"New MyObject Action Plan\" Display Type is List Button. Uncheck the list checkbox. Use the following format for the button(removing the LabsActionPlans namespace if you're not using the managed package):{!URLFOR( $Action.LabsActionPlans__ActionPlan__c.New, null, [refType=\"CustomObject__c\", refId=CustomObject__c.Id] )} Create Action Plans for multiple Custom Object records Just as there is a button for Account list views to create multiple Action Plans, you can do the same for your custom object. Create a Visualforce page with the following code: Then create a list view button for that object and add it to your list views. To Stop Using an Object with Action Plans If you want, for example, not to allow relating Action Plans to Contracts, remove the Contract field from the Action Plan Related Objects fieldset.There is no need to delete the field from the Action Plan object. Create a Template Now you're ready to create your first template. Navigate to the Action Plans Templates tab. Click on the \"New Action Plan Template\" button. The template screen looks like this: Name - Template Name. Description - An explanation of how the template should be used. Skip Weekends - Allows you to automatically reschedule a task that would fall on a weekend to either the day before or day after the weekend. When checked, a picklist appears, allowing you to select before or after the weekend. Action - Click \"X\" to eliminate a step in a template. Subject - What the task is to do. Task Dependency - The dependent task will only be created once the controlling task is completed. Days After- This value determines the due date of the task. For tasks with no dependency, the task's due date will be offset from the plan start date. For tasks with a dependency, the due date will be offset from the expected due date of the task on which it depends. Assigned To - Looks up to user. Leave blank if you want to assign the task dynamically.When assigning dynamically, the default behavior will be to assign the task to the running user. You can also have the system assign it to the record owner by changing your Action Plan Settings. See \"Post Install Configuration\" guide above. Category - What type of activity. Priority - Taken from Task priorities and Record Type(if applicable). Email - Send a standard New Task email when checked. For Tasks depending on others, the email will be sent when the task is created. Reminder - This check box will define the default behaviour for reminders when applying the template to create an Action plan . If it's left unchecked, in the Action Plan Creation page the reminders will be initially disabled If it's checked the reminders will be available. User Reminder settings: Go Personal Setup > My Personal Information > Reminders, if the option \"By default, set reminder on Tasks to:\" is checked then the selected time will be the default option for task template reminders. User setting for Activity Object : Go App Setup> Feature Settings > Sales > Activity Settings, If \"Enable Activity Reminders\" is not checked, then reminders column will not be displayed in the Action Plan creation page. Comments - Comments supporting a task. Add New Task - Adds an additional row to the tasks grid. Save - Saves the template. Task Record Types If your org uses Task Record Types, you must specify which Record Type to use for all Tasks from each Action Plan and Template record. This will affect the Status values available for each related Action Plan Task. This cannot be changed once an Action Plan or Template is created. Only one record type may be specified for all the Tasks on that Action Plan or Template. Create Action Plans for Several Accounts Navigate to an Accounts list view. Select the Accounts for which you want to create Action Plans. Click on the \"Create Account Action Plans\" button. Select the template you want to use by typing the name on the lookup and clicking on it. Enter the information specific to this plan. Note that the Accounts you selected earlier are visible. Save the Action Plan. Note: Action Plan creation is handled by a queueable(asynchronous) process. It can take a couple of minutes to be able to view all created records. Verify the Action Plan and the tasks. Complete the first task on the Action Plan. Note that the Action Plan is now in the correct related list and that this Account has one open activity and one closed activity. The third activity in the template is dependent and will be created only when its controlling task is complete. Task notifications for Flow-created Action Plans User Settings To receive Task notifications if Send Email is selected on an Action Plan Task, ensure that users have been allowed to control receipt of Task notification emails(this is active by default), and that they have allowed email notifications to be sent(this is also enabled by default). See Salesforce H&T for more information. Org Setting The Send Email field on Action Plan Task must be checked to send a email notifications, and the setting Allow Flow to send delegated task notifications on records created through Apex must also be enabled. Go to Settings > Feature Settings > Sales > Activity Settings to check that box and allow email notifications to be sent via Flow-created Action Plans. Action Plan Tasks If the user has enabled task notification, then those will be sent when an Action Plan Task is created. If the Action Plan Task is updated to a new owner, and if the Send Email box is NOT checked, the user may still receive a task notification if that is in their personal settings. If the box is checked, assuming that notifications are enabled for that user, the email will be sent. Queues Action Plan Tasks cannot be assigned to queues, so if the parent record is owned by a queue, each AP Task will be assigned to the running user. Tasks generated from that Action Plan can be assigned to the queue by using a Flow to reassign the Tasks. Because the Invocable Apex returns a list of Action Plan Task IDs, the createdTasks(which have a relationship to the Action Plan tasks) can be updated in that same flow, as they are created synchronously and can be queried immediately. Alternatively, reassign Tasks to Queues any other way you'd like; it will not break Action Plans, and the Queue name will show on the Action Plan detail page. Automate Action Plan Creation Flow Action Plans includes an Invocable Apex class that can be included in a Flow. The Record ID of the triggering record is required, as is the Id OR the Name of the desired template.Days from trigger to start Action Plan is optional(and defaults to 0). The first task will be due the number of days(specified on the template) from the start date. This date may fall on a weekend, though task due dates can be moved to avoid weekends if set on the template. The Invocable Apex class returns the Salesforce IDs of all the created Action Plan Tasks, which can be used in the next Flow steps. (Optional) Sample Action Plan Template for Account onboarding Run the following: sfdx force:apex:execute -f ./data/sample-data.apex To use this Template with the included Flow, see the Create Action Plan From Template Apex Action in the New Customer Onboarding Activities Flow Create an Account and set Type to any value that starts with 'Customer' Process Builder It is recommended NOT to check the Recursion box when creating a Process Builder to work with Action Plans. It is also recommended NOT to use Process Builder at all! Apex To call the invocable Apex from a Trigger or Apex class, adapt the following sample code: UNMANAGED CODE String apTemplateName; ActionPlanTemplate__c apTemplate; List toInsert... // can use any object, such as Account, or the generic SObject class List requests = new List(); for(SObject a : toInsert){ ActionPlanCreateInvocable.CreateActionPlanRequest req = new ActionPlanCreateInvocable.CreateActionPlanRequest(); req.templateNameOrID = apTemplate.Id; req.relatedRecordID = a.Id; req.daysToActionPlanStart = 0; req.actionPlanName = a.Name + ' - Onboarding'; requests.add(req); } List resultIDs = ActionPlanCreateInvocable.makeActionPlanFromTemplate(requests); MANAGED PACKAGE String apTemplateName; LabsActionPlans__ActionPlanTemplate__c apTemplate; List toInsert... // can use any object, such as Account, or the generic SObject class List requests = new List(); for(SObject a : toInsert){ LabsActionPlans.ActionPlanCreateInvocable.CreateActionPlanRequest req = new LabsActionPlans.ActionPlanCreateInvocable.CreateActionPlanRequest(); req.templateNameOrID = apTemplateName; req.relatedRecordID = a.Id; req.daysToActionPlanStart = 1; req.actionPlanName = a.Name + ' - Onboarding'; requests.add(req); } List resultIDs = LabsActionPlans.ActionPlanCreateInvocable.makeActionPlanFromTemplate(requests); ActionPlanCreateInvocable.CreateActionPlanRequest class Variables: String templateNameOrID (required) Name is not unique, so ID is preferred Id relatedRecordID (required) Must have a relationship field named the related record object name from Action Plan object Integer daysToActionPlanStart (not required) Defaults to 0, the day the plan is created String actionPlanName (not required) Give the Action Plan a custom name. If not specified, defaults to {Template Name} - {Parent Record Name}. Share Your Templates and Discover Best Practices using Template Export and Template Import Action Plans supports the sharing and discovery of best practices using Template Export and Template Import. How to Share Your Template Export is simple. Navigate to the Template you wish to export. Click on the \"Export\" button. Export creates a simple XML file containing template header and task information. It also includes information about who created the template.Note: It does not include user information or sensitive data about what objects you might use this template with. If you are using Lightning Experience, the exported file is in your Files tab, in your private files library. If you are still using Salesforce Classic, it is in your Documents tab, in your private documents folder. Sharing the file is easy. Email the file to whomever you want to share it with. Do you want to share it with a broader audience? Email the file to Salesforce Labs at labs@salesforce.com . Best Practices: How to Import Import is also simple. Navigate to the \"Import Template\" tab. Select the file you want to import using \"Browse\" and once you've found it click on \"Import Template.\" (Optional) Sample Action Plan Template Import This repository also includes sample Action Plan Template files, which you can import on the appropriate tab. You may download New Customer Onboarding or Trade Show Follow Up from GitHub, or you can find it in this SFDX project in the data folder."
+ "text": "Home Action Plans Changelog Action Plans Installation and Setup Please follow installation instructions, shown on the Installation page AppExchange - Recommended AppExchange Listing Post-intall extras Scratch Org Developer Edition / Sandbox Apex Code Documentation About Action Plans Action Plans helps your organization encapsulate best practices into easily sharable, reusable task templates. You can create Action Plans for the following objects: Accounts Contacts Leads Opportunities Campaigns Contracts Cases Person Accounts Custom Objects Getting Help Action Plans is unsupported. For community assistance with Action Plans, please visit Salesforce Trailblazer Community . To submit ideas or issues, please visit Action Plans on Github . Community Action Plans is open source software. We welcome your issue reports, ideas, documentation, code tweaks and all other participation. Learn more . Features: Export and share your Action Plan Templates with other orgs. Import Action Plan Templates. Supports Task reminder times. Action Plans Settings controls behavior around Chatter Notifications, actions when a Lead is converted, and default Task assignment behavior Invocable Apex allows automatic Action Plan creation from a Template in Process Builder and Flow Post Install Configuration Getting started is easy. For each object, you need to add a button to the list view, add a button to the detail page. For Accounts, follow these steps:\" Update Action Plans Custom Settings Change these setting by editing Action Plan Settings, and updating values at either the organization level, profile levels, or user levels. Navigate to Setup > Develop > Custom Settings. Click on 'Manage' next to Action Plans Settings . Click the 'New' button near 'Default Organizational Level Value'. Check the values that you want to enable. Enable Chatter Post places a post in the related record's Chatter Feed(if Chatter is enabled for that object). If unchecked, Action Plans does not create a Feed Post. Unassigned Task Defaults to Record Owner ensures that Action Plan Template tasks with a blank 'Assigned To' field go to the related record's owner. If unchecked, tasks with a blank 'Assigned To' field are assigned to the running user. Tasks can be assigned to specific people on Action Plan Templates, which overrides this setting. Default Object on Lead Conversion specifies that if an Action Plan is related to a Lead, whether the Action Plan should be moved to the converted Account, Contact, or Opportunity when the Lead is converted. The default is Contact. Action Plans Business Hours ID and Use Business Hours are reserved for future functionality. Weekends: Custom Metadata Modify Custom Metadata Weekend Day to indicate which days of the week are the weekend and how many days to move a task forward or backwards to move it to the end of the previous week or the start of the next week. This allows you to work with a different weekend, or to avoid assigning any task to be due on any specific day of the week.All weekdays should have 0 in both numeric fields. Update Your Page & Search Layout Configurations Create Action Plans Buttons For each object, you need to add a button to the list view, For Accounts, follow these steps: Navigate to Setup > Object Manager > Account > Search Layouts for Salesforce Classic Click on \"Edit\" from the menu near \"List View.\" Move the \"Create Account Action Plans\" button from \"Available Buttons\" to \"Selected Buttons.\" Click \"Save.\" Navigate to Setup > Object Manager > Account > Page Layouts. Note: the package includes a default \"Action Plan Layout\" for your reference. You do not need to use it. Click on \"Edit\" near one of your standard Account Page Layouts. Add \"Action Plans\" related list to the page. Edit the properties of the related list by clicking the configuration button above it. Expand \"Buttons\" section, clear the \"New\" checkbox and move \"Create Account Action Plan\" to the Selected buttons. Update the fields in the related list to meet your needs. Recommended fields include Start Date, Action Plan Status, Action Plan Template, Plan Start Date. Click \"Save.\" Repeat these steps for the other standard objects Action Plans supports: Contacts, Leads, Opportunities, etc. Delete Action Plans Buttons Follow this steps for Action Plan Object: Navigate to Setup > Object Manager > Action Plan > Search Layouts. Click on \"Edit\" near \"List View.\" Move the \"Delete Action Plans\" button from \"Available Buttons\" to \"Selected Buttons.\" Click \"Save.\" Task Layout Optionally, add the \"Action Plan Task\" field to your Task page layout, but it should be Read-Only , as clearing this field will break the ability to track Action Plan progress. Security Update Your Org-Wide Default Sharing Settings Action Plans includes two shareable objects: Action Plan and Action Plan Template . You may configure your sharing settings in whatever way works for your organization. If you want anyone to be able to create and see plans and their templates, use Public Read/Write for Action Plan and Action Plan Template. If you want anyone to be able to see Action Plans and Templates without being able to change them, select \"Public Read Only.\" If your Org-Wide Default sharing settings are set to Private for Action Plan or Action Plan Template, you may need to implement custom automation to share Action Plan records with the appropriate people. You may do this via Apex sharing, or you may use other automation, to assign ownership of the Action Plan itself to the related record owner or any desired user. To use Action Plans, most users require access only to Tasks . They can be assigned Tasks without knowing that these Tasks are part of an Action Plan. Any changes they make to a Task's Status will be reflected in the related Action Plan Task Template record automatically. No Permission Set is required. Use Permission Sets For Security Assign the appropriate Permission Set(s) to each user who will need to use Action Plans: Action Plans Admin: Full permissions for Action Plans, Action Plan Templates, AP Tasks and APT Task Templates. Action Plans Template Creator: Full permissions for Action Plan Templates and AP Template Tasks. No Action Plan access. Action Plans Creator: Read, Create, Edit, Delete for Action Plans and AP Tasks. Read-only for Action Plan Templates and APT Task Templates. Action Plans Import/Export: Access to export and import Action Plan Template records. View the appropriate button for export and tab for import. Action Plans User: Read-only for Action Plans and AP Tasks. Edit permission for Tasks should be provided via the user's profile or other permission sets. Uses for each Permission Set: Some users may require visibility into the Action Plans related to those Tasks. These users need the Action Plans User Permission Set. It gives Read-only access to Action Plan. Some users may need to create Action Plans from Templates but not edit the templates themselves. The Action Plans Creator Permission Set gives read-only access to Action Plan Templates, and Read, Create, Edit, and Delete access to Action Plans. Users who can create and edit Action Plan Templates require the Action Plans Template Creator Permission Set. This includes permission to Read, Create, Edit, and Delete all Action Plan Templates only. It does not include any Action Plan or Task permissions. If these users require Action Plan access, other Permission Sets should be used as well. A custom permission allows exporting of Action Plan Templates. Intended as an add-on for Action Plans Template Creator , the Action Plans Import/Export permission set allows the viewing of the Export button on Template detail pages and to the Import tab. The custom permission Action Plan Template Export allows exporting of Action Plan Templates and associated tasks. Use this permission with care, as it is a potential security hole for your org's proprietary templates. This is a great way to move templates from a Sandbox to Production org. Action Plans Admin includes Modify All permissions for all four Action Plan objects(Action Plan, Action Plan Task Template, Action Plan Template, and Action Plan Template Task Template). The custom permission allows exporting Action Plan Templates. Note: The Apex used in Flows or via triggers does not require special permissions to run. Using Action Plans with Custom Objects Start Using an Object with Action Plans Create the object and be sure to check \"Track Activities\" for the object attrributes Create a lookup field from Action Plan to the object. Name the field the same as the object name. The field label can be anything. As an example, if you have a custom object named MyObject__c , you must name the field on Action Plan MyObject__c Add the field to the Related Objects fieldset on Action Plan. The related object will now be available for selection when creating a new Action Plan and relating it to an object. Add the following code to the object trigger in before delete and after undelete contexts(removing the LabsActionPlans namespace if you're not using the managed package):LabsActionPlans.ActionPlansTriggerHandlers.actionPlansSObjectTriggerHandler( 'CustomObject__c' ); Test Code for Additional Objects Don't forget to write a test class to cover the custom object trigger. If you're just going for coverage(not a best-practice!) just make a test method inserting and then deleting a record.Unfortunately, the code in this package does not lend itself to easy creation of an Action Plan for a custom object... yet. Adding a Create Custom Object Action Plan button to the Action Plan object While Action Plans already overrides the New Action Plan action, the New button will show a new Action Plan screen, but will not allow adding an existing template.(Perhaps this will be in a future release... safe harbor.) Create a custom button with the following format on the Action Plan object and add it to the related list on the custom object page layout: Navigate to Setup > Object Manager > Action Plan > Buttons, Links, and Actions > New Button or Link Give it a label and name, such as \"New MyObject Action Plan\" Display Type is List Button. Uncheck the list checkbox. Use the following format for the button(removing the LabsActionPlans__ namespace if you're not using the managed package):{!URLFOR( $Action.LabsActionPlans__ActionPlan__c.New, null, [refType=\"CustomObject__c\", refId=CustomObject__c.Id] )} Be sure to remove the standard New button on the Action Plans related list and use this button instead. Create Action Plans for multiple Custom Object records Just as there is a button for Account list views to create multiple Action Plans, you can do the same for your custom object. Create a Visualforce page with the following code: Then create a list view button for that object and add it to your list views. To Stop Using an Object with Action Plans If you want, for example, not to allow relating Action Plans to Contracts, remove the Contract field from the Action Plan Related Objects fieldset.There is no need to delete the field from the Action Plan object. Create a Template Now you're ready to create your first template. Navigate to the Action Plans Templates tab. Click on the \"New Action Plan Template\" button. The template screen looks like this: Name - Template Name. Description - An explanation of how the template should be used. Skip Weekends - Allows you to automatically reschedule a task that would fall on a weekend to either the day before or day after the weekend. When checked, a picklist appears, allowing you to select before or after the weekend. Action - Click \"X\" to eliminate a step in a template. Subject - What the task is to do. Task Dependency - The dependent task will only be created once the controlling task is completed. Days After- This value determines the due date of the task. For tasks with no dependency, the task's due date will be offset from the plan start date. For tasks with a dependency, the due date will be offset from the expected due date of the task on which it depends. Assigned To - Looks up to user. Leave blank if you want to assign the task dynamically.When assigning dynamically, the default behavior will be to assign the task to the running user. You can also have the system assign it to the record owner by changing your Action Plan Settings. See \"Post Install Configuration\" guide above. Category - What type of activity. Priority - Taken from Task priorities and Record Type(if applicable). Email - Send a standard New Task email when checked. For Tasks depending on others, the email will be sent when the task is created. Reminder - This check box will define the default behaviour for reminders when applying the template to create an Action plan . If it's left unchecked, in the Action Plan Creation page the reminders will be initially disabled If it's checked the reminders will be available. User Reminder settings: Go Personal Setup > My Personal Information > Reminders, if the option \"By default, set reminder on Tasks to:\" is checked then the selected time will be the default option for task template reminders. User setting for Activity Object : Go App Setup> Feature Settings > Sales > Activity Settings, If \"Enable Activity Reminders\" is not checked, then reminders column will not be displayed in the Action Plan creation page. Comments - Comments supporting a task. Add New Task - Adds an additional row to the tasks grid. Save - Saves the template. Task Record Types If your org uses Task Record Types, you must specify which Record Type to use for all Tasks from each Action Plan and Template record. This will affect the Status values available for each related Action Plan Task. This cannot be changed once an Action Plan or Template is created. Only one record type may be specified for all the Tasks on that Action Plan or Template. Create Action Plans for Several Accounts Navigate to an Accounts list view. Select the Accounts for which you want to create Action Plans. Click on the \"Create Account Action Plans\" button. Select the template you want to use by typing the name on the lookup and clicking on it. Enter the information specific to this plan. Note that the Accounts you selected earlier are visible. Save the Action Plan. Note: Action Plan creation is handled by a queueable(asynchronous) process. It can take a couple of minutes to be able to view all created records. Verify the Action Plan and the tasks. Complete the first task on the Action Plan. Note that the Action Plan is now in the correct related list and that this Account has one open activity and one closed activity. The third activity in the template is dependent and will be created only when its controlling task is complete.(A Contact related list is shown here, but this applies equally to Accounts.) Task notifications for Flow-created Action Plans User Settings To receive Task notifications if Send Email is selected on an Action Plan Task, ensure that users have been allowed to control receipt of Task notification emails(this is active by default), and that they have allowed email notifications to be sent(this is also enabled by default). See Salesforce H&T for more information. Org Setting The Send Email field on Action Plan Task must be checked to send a email notifications, and the setting Allow Flow to send delegated task notifications on records created through Apex must also be enabled. Go to Settings > Feature Settings > Sales > Activity Settings to check that box and allow email notifications to be sent via Flow-created Action Plans. Action Plan Tasks If the user has enabled task notification, then those will be sent when an Action Plan Task is created. If the Action Plan Task is updated to a new owner, and if the Send Email box is NOT checked, the user may still receive a task notification if that is in their personal settings. If the box is checked, assuming that notifications are enabled for that user, the email will be sent. Queues Action Plan Tasks cannot be assigned to queues, so if the parent record is owned by a queue, each AP Task will be assigned to the running user. Tasks generated from that Action Plan can be assigned to the queue by using a Flow to reassign the Tasks. Because the Invocable Apex returns a list of Action Plan Task IDs, the created Tasks(which have a relationship to the Action Plan tasks) can be updated in that same flow, as they are created synchronously and can be queried immediately. Alternatively, reassign Tasks to Queues any other way you'd like; it will not break Action Plans, and the Queue name will show on the Action Plan detail page. Automate Action Plan Creation Flow Action Plans includes an Invocable Apex class that can be included in a Flow. The Record ID of the triggering record is required, as is the Id OR the Name of the desired template.Days from trigger to start Action Plan is optional(and defaults to 0). The first task will be due the number of days(specified on the template) from the start date. This date may fall on a weekend, though task due dates can be moved to avoid weekends if set on the template. The Invocable Apex class returns the Salesforce IDs of all the created Action Plan Tasks, which can be used in the next Flow steps. (Optional) Sample Action Plan Template for Account onboarding Run the following: sf apex run --file ./data/sample-data.apex To use this Template with the included Flow, see the Create Action Plan From Template Apex Action in the New Customer Onboarding Activities Flow Create an Account and set Type to any value that starts with 'Customer' Process Builder It is recommended NOT to check the Recursion box when creating a Process Builder to work with Action Plans. It is also recommended NOT to use Process Builder at all! Apex To call the invocable Apex from a Trigger or Apex class, adapt the following sample code: UNMANAGED CODE String apTemplateName; ActionPlanTemplate__c apTemplate; List toInsert... // can use any object, such as Account, or the generic SObject class List requests = new List(); for(SObject a : toInsert){ ActionPlanCreateInvocable.CreateActionPlanRequest req = new ActionPlanCreateInvocable.CreateActionPlanRequest(); req.templateNameOrID = apTemplate.Id; req.relatedRecordID = a.Id; req.daysToActionPlanStart = 0; req.actionPlanName = a.Name + ' - Onboarding'; requests.add(req); } List resultIDs = ActionPlanCreateInvocable.makeActionPlanFromTemplate(requests); MANAGED PACKAGE String apTemplateName; LabsActionPlans__ActionPlanTemplate__c apTemplate; List toInsert... // can use any object, such as Account, or the generic SObject class List requests = new List(); for(SObject a : toInsert){ LabsActionPlans.ActionPlanCreateInvocable.CreateActionPlanRequest req = new LabsActionPlans.ActionPlanCreateInvocable.CreateActionPlanRequest(); req.templateNameOrID = apTemplateName; req.relatedRecordID = a.Id; req.daysToActionPlanStart = 1; req.actionPlanName = a.Name + ' - Onboarding'; requests.add(req); } List resultIDs = LabsActionPlans.ActionPlanCreateInvocable.makeActionPlanFromTemplate(requests); ActionPlanCreateInvocable.CreateActionPlanRequest class Variables: String templateNameOrID (required) Name is not unique, so ID is preferred Id relatedRecordID (required) Must have a relationship field named the related record object name from Action Plan object Integer daysToActionPlanStart (not required) Defaults to 0, the day the plan is created String actionPlanName (not required) Give the Action Plan a custom name. If not specified, defaults to {Template Name} - {Parent Record Name}. Share Your Templates and Discover Best Practices using Template Export and Template Import Action Plans supports the sharing and discovery of best practices using Template Export and Template Import. How to Share Your Template Export is simple. Navigate to the Template you wish to export. Click on the \"Export\" button. Export creates a simple XML file containing template header and task information. It also includes information about who created the template.Note: It does not include user information or sensitive data about what objects you might use this template with. If you are using Lightning Experience, the exported file is in your Files tab, in your private files library. If you are still using Salesforce Classic, it is in your Documents tab, in your private documents folder. Sharing the file is easy. Email the file to whomever you want to share it with. Do you want to share it with a broader audience? Email the file to Salesforce Labs at labs@salesforce.com . Best Practices: How to Import Import is also simple. Navigate to the \"Import Template\" tab. Select the file you want to import using \"Browse\" and once you've found it click on \"Import Template.\" (Optional) Sample Action Plan Template Import This repository also includes sample Action Plan Template files, which you can import on the appropriate tab. You may download New Customer Onboarding or Trade Show Follow Up from GitHub, or you can find it in this SFDX project in the data folder."
+ },
+ {
+ "title": "installation",
+ "fileName": "installation.html",
+ "text": "Action Plans Installation Follow these instructions to deploy Action Plans to your org. Deployment Methods AppExchange : The managed package is the best way to go - it will let you upgrade seamlessly as features are added. Installing the App Using a Scratch Org : Fast and easy way to work with this app in a scratch org Installing the app using a Developer Edition Org or a Sandbox : Useful when tackling Trailhead Badges or if you want the app deployed to a more permanent environment than a scratch org. Optional installation instructions : Installing sample Action Plan Template and other metadata AppExchange(Managed Package - RECOMMENDED) Action Plans : This is the best way to install the package, which you can easily upgrade as features are added. Installing the App using a Scratch Org Set up your environment. Follow the steps in the Quick Start: Lightning Web Components Trailhead project. The steps include: Enable Dev Hub in your Trailhead Playground or hub org Install Salesforce CLI Install Visual Studio Code Install the Visual Studio Code Salesforce extensions If you haven't already done so, authorize your hub org and provide it with an alias(myhuborg in the command below): sf org login web --set-default --alias myhuborg Clone this repository: git clone https://github.com/SalesforceLabs/ActionPlansV4 cd ActionPlansV4 From the terminal window, run the installation script npm run scratchorg or . scripts/scratchorg.sh That's it! Installing the App using a Developer Edition Org or your own Sandbox Org Follow this set of instructions if you want to deploy the app to a more permanent environment than a Scratch org.This includes non source-tracked orgs such as a free Developer Edition Org or a Trailhead Playground , or your own Sandbox. Start from a brand-new environment to avoid conflicts with previous work you may have done. Authorize your org and provide it with an alias(myorg in the command below): sf org login web --set-default --alias myorg Clone this repository: git clone https://github.com/SalesforceLabs/ActionPlansV4 cd ActionPlansV4 If you are setting up a Developer Edition: go to Setup , and under My Domain , register a My Domain . Then ensure that enhanced domains are activated. You may need to enable Salesforce Edge network first. To run all the next steps at once, run this command in the terminal: . scripts/unmanaged.sh The org will open. That's it! Or run these steps one by one Run this command to deploy the app. sf deploy metadata --source-dir sfdx-source/LabsActionPlans Assign the Action_Plans_Admin permission set to the admin user. sf org assign permset --name Action_Plans_Admin (Optional) Load sample metadata (see below) sf deploy metadata --source-dir sfdx-source/unmanaged If your org isn't already open, open it now: sf org open --target-org myorg In App Launcher, select the Action Plans app. Optional Installation Instructions This repository contains several files that are relevant if you want to add sample data, or integrate modern web development tooling to your Salesforce development processes or to your continuous integration/continuous deployment processes. Data/Metadata Import(Optional - NOT available if using the AppExchange managed package) This repository creates sample data(Accounts, Contacts, Leads) if you choose to create a scratch org. To prevent this, go to the scratch org definition and change hasSampleData to false . \"hasSampleData\": false, To create a sample Action Plan Template for Account onboarding, run the following: sf apex run --file ./data/sample-data.apex To create a sample Flow that uses the sample template a sample Account layout a sample Task layout a sample report on open Action Plan-related Tasks sf deploy metadata --source-dir sfdx-source/unmanaged You can also create other sample Account and Contact records by running the following command: sf data import tree --plan ./data/action-plan-data-plan.json Data/Metadata Import(Optional - ONLY if using the AppExchange managed package) When FIRST installing the package, it will automatically create a sample Action Plan Template for Account onboarding. If you want to recreate it manually, run the following: sf apex run --file ./data/sample-data-managed.apex To create a sample Flow that uses the sample template a sample Account layout a sample Task layout a sample report on open Action Plan-related Tasks sf deploy metadata --source-dir sfdx-source/unmanagedExtension You can also create other sample Account and Contact records by running the following command: sf data import tree --plan ./data/action-plan-data-plan.json Code formatting Prettier is a code formatter used to ensure consistent formatting across your code base. To use Prettier with Visual Studio Code, install this extension from the Visual Studio Code Marketplace. The .prettierignore and .prettierrc files are provided as part of this repository to control the behavior of the Prettier formatter. Prettier Apex is an extension that handles Apex-specific formatting and allows the removal of the extra line via the Prettier config file. To use it with Visual Studio Code, follow these instructions from the Salesforce Extensions site. Pre-commit hook This repository also comes with a package.json file that makes it easy to set up a pre-commit hook that enforces code formatting by running Prettier every time you git commit changes. To set up the formatting pre-commit hook: Install Node.js if you haven't already done so Run npm install in your project's root folder to install the Husky and Prettier modules(Note: Mac users should verify that Xcode command line tools are installed before running this command.) Husky will now run Prettier automatically every time you commit changes, with some other updates if you installed the recommended extension ApexDox. You can also run the formatting from the command line using the following command(check out package.json for the full list): npm run prettier"
+ },
+ {
+ "title": "changelog",
+ "fileName": "changelog.html",
+ "text": "Changelog All notable changes to this project will be documented in this file. The format is based on Keep a Changelog and this project adheres to Semantic Versioning . Unreleased Merged build(deps-dev): bump eslint from 8.34.0 to 8.35.0 #4 feat(tests): update tests(assertions, messages) #3 feat: update API to 57.0 #1 Bump github/codeql-action from 1 to 2 #59 Fix assigned to field #60 Archived flag, dependent task fixes, SOQL optimization #58 Cosmetic rearrangements, apexdoc #55 4.3.0 Queues, Child Objects #53 Version 4.3.0 pt 2 #47 Version 4.3.0 #44 Codecov to v3 #41 4.2.1 - 2022-05-25 Merged Version 4.2.1 #37 Namespace to sample code #36 v4.2.0 #30 Fixed Version 4.2.1(#37) #35 #34 Namespace to sample code(#36) #35 4.2.0 - 2022-04-01 Merged Specify Action Plan Name in Invocable Apex #27 Prettier, JS fixing #26 Highlight.js to 11.5 #25 Add changelog #24 Bump minimist from 1.2.5 to 1.2.6 #23 Upgrading Instructions #22 Add Codecov #21 4.1.0 - 2022-03-17 Merged Release Ready #19 Pre-Release(beta15) #18 Pre-Commit ApexDox cleanup #16 Scripts, Cleanup, New Build #15 4.0.0-9 - 2022-02-23 Merged AP Task AssignedTo field cleanup #14 Managed vs Unmanaged Project Config #13 Permissions Updates #12 Remove tests from ApexDox #10 Security, code coverage, Print page, Spring 22! #7 Code and documentation cleanup #6 PMD-suggested cleanup #5 Rename Template Task #4 Version 4.0.0.7 #3 Code comment cleanup #2 ApexDocs, Project Files, PMD rules #1"
},
{
"title": "ActionPlanCreateInvocable",
"fileName": "ActionPlanCreateInvocable.html",
- "text": "ActionPlanCreateInvocable Signature global without sharing class ActionPlanCreateInvocable David Schach 2022 ActionPlanCreateInvocable Methods makeActionPlanFromTemplate(requests) Invocable Apex for creating Action Plans from a template, a parent ID, and days from now to start the task due dates makeActionPlanFromTemplate(requests) Invocable Apex for creating Action Plans from a template, a parent ID, and days from now to start the task due dates Signature @InvocableMethod(label='Create Action Plan From Template' description='Takes a Template Name/Id and Record Id and makes an Action Plan for that record.' category='ActionPlans') global static List makeActionPlanFromTemplate(List requests) Parameters requests Type: List Wrapper of CreateActionPlanRequest Returns List of the created Action Plans See ActionPlanCreateInvocable.CreateActionPlanRequest Example String apTemplateName; ActionPlanTemplate__c apTemplate; List toInsert... // can use any object, such as Account, or the generic SObject class List requests = new List(); for(SObject a : toInsert){ ActionPlanCreateInvocable.CreateActionPlanRequest req = new ActionPlanCreateInvocable.CreateActionPlanRequest(); req.templateNameOrID = apTemplate.Id; req.relatedRecordID = a.Id; req.daysToActionPlanStart = 0; req.actionPlanName = apTemplate.Name + ' - ' + a.Name; // optional requests.add(req); List resultIDs = ActionPlanCreateInvocable.makeActionPlanFromTemplate(requests); ActionPlanCreateInvocable.CreateActionPlanRequest Wrapper class for ActionPlan Request for invocable Apex. Signature global class CreateActionPlanRequest David Schach 2022 ActionPlanCreateInvocable.CreateActionPlanRequest Properties Name Signature Description actionPlanName global String actionPlanName The Action Plan Name. If not specified, the Action Plan will be called - daysToActionPlanStart global Integer daysToActionPlanStart Days from trigger to start Action Plan. Defaults to 0, the day the plan is created. relatedRecordID global Id relatedRecordID The parent Record ID. Must have a relationship named the related record object name from Action Plan object. templateNameOrID global String templateNameOrID The template Id or Name to use.(Name is not unique, so ID is preferred)"
+ "text": "ActionPlanCreateInvocable Signature global without sharing class ActionPlanCreateInvocable Author David Schach Since 2022 ActionPlanCreateInvocable Methods makeActionPlanFromTemplate(requests) Invocable Apex for creating Action Plans from a template, a parent ID, and days from now to start the task due dates makeActionPlanFromTemplate(requests) Invocable Apex for creating Action Plans from a template, a parent ID, and days from now to start the task due dates Signature @InvocableMethod(label='Create Action Plan From Template' description='Takes a Template Name/Id and Record Id and makes an Action Plan for that record.' category='ActionPlans') global static List makeActionPlanFromTemplate(List requests) Parameters requests Type: List Wrapper of CreateActionPlanRequest Returns List of the created Action Plans See ActionPlanCreateInvocable.CreateActionPlanRequest Example String apTemplateName; ActionPlanTemplate__c apTemplate; List toInsert... // can use any object, such as Account, or the generic SObject class List requests = new List(); for(SObject a : toInsert){ ActionPlanCreateInvocable.CreateActionPlanRequest req = new ActionPlanCreateInvocable.CreateActionPlanRequest(); req.templateNameOrID = apTemplate.Id; req.relatedRecordID = a.Id; req.daysToActionPlanStart = 0; req.actionPlanName = apTemplate.Name + ' - ' + a.Name; // optional requests.add(req); List resultIDs = ActionPlanCreateInvocable.makeActionPlanFromTemplate(requests); ActionPlanCreateInvocable.CreateActionPlanRequest Wrapper class for ActionPlan Request for invocable Apex. Signature global class CreateActionPlanRequest Author David Schach Since 2022 ActionPlanCreateInvocable.CreateActionPlanRequest Properties Name Signature Description actionPlanName global String actionPlanName The Action Plan Name. If not specified, the Action Plan will be called - daysToActionPlanStart global Integer daysToActionPlanStart Days from trigger to start Action Plan. Defaults to 0, the day the plan is created. relatedRecordID global Id relatedRecordID The parent Record ID. Must have a relationship named the related record object name from Action Plan object. templateNameOrID global String templateNameOrID The template Id or Name to use.(Name is not unique, so ID is preferred)"
},
{
"title": "ActionPlanCreationController",
"fileName": "ActionPlanCreationController.html",
- "text": "ActionPlanCreationController Controller for ActionPlan Create and ActionPlan Edit screens(the same page overrides both actions) Signature public with sharing class ActionPlanCreationController See ActionPlanCreateInvocable Rodrigo Birriel David Schach 2022 ActionPlanCreationController Properties Name Signature Annotations Description actionPlan private ActionPlan__c actionPlan @TestVisible Page Action Plan addedTask private APTask__c addedTask @testVisible The APTask__c instantiated when clicking the Add New Task link on the page apTasks private List apTasks @testVisible Stored APTask__c records for the page. See getAPTasks() canDisplayReminder public Boolean canDisplayReminder Is the User able to see reminders? cloneParam private String cloneParam Are we cloning an Action Plan? If so, this is 1. Otherwise, it is 0. errorMsg private String errorMsg Error message to display(outside of Apex.PageMessages) hasRelated public Boolean hasRelated Is there a related record or template when we load the page? hasRelatedObject public Boolean hasRelatedObject Set to true if a relationship field is filled inVisualforceContext private Boolean inVisualforceContext @testVisible Esure we are working in Visualforce context. For future functionality allowing invocable Apex to call this class directly mapTasksListBkp private Map mapTasksListBkp Map to retrieve our APTaskWrapper records by APTask Id Currently unused; should be deleted if package testing passes pendingDeletes private List pendingDeletes Temporary list of APTasks to delete, based on taskIndex refId public String refId Getter and Setter for refId(related record Id) refType public String refType Getter and Setter for RefType(related object Name) relatedFieldName public String relatedFieldName Get the specific lookup field used by this Action Plan relatedObjDisplayField public String relatedObjDisplayField The field on the related record we use to display on the ActionPlan.(Not Name for Case and Contract) relatedObjectName public String relatedObjectName The name of the object(the same as the relationship field, except for standard objects) the AP is related to. NOT the name of the related record relatedObjectOptions private List relatedObjectOptions Picklist of related object options, generated from the Field Set on Action Plan relatedObjLabelPlural public String relatedObjLabelPlural Related Object Name(Plural) relatedObjNameList private List relatedObjNameList @TestVisible We need a list of parent RECORD names when showing all the parents when we mass-create action plans This initializes the list, and then divides it into three parts for three columns on the page. relatedRecordIDs private Set relatedRecordIDs Related Record IDs relatedRecordsOne public List relatedRecordsOne Column one of related records relatedRecordsThree public List relatedRecordsThree Column three of related records relatedRecordsTwo public List relatedRecordsTwo Column two of related records relationshipFields private List relationshipFields Memoize relationship fields subtitle public String subtitle The subtitle shown on the page taskHasRecordType public Boolean taskHasRecordType If the Task object has Record Types enabled, return true taskIndex private Double taskIndex Max taskIndex for this Action Plan taskOwnerMap public Map taskOwnerMap Map of Action Plan Task Id to the Task owner(or APTask User if no Task has been created) taskPriorities private List taskPriorities Picklist of Task.Priority values taskTypes private List taskTypes Picklist of Task.Type values templateId private Id templateId TemplateId is pulled from the page parameters and tells us if we're making an Action Plan based on a template ActionPlanCreationController Constructors ActionPlanCreationController(stdController) Constructor for ActionPlan Create/Edit Page ActionPlanCreationController(stdController) Constructor for ActionPlan Create/Edit Page Signature public ActionPlanCreationController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController ActionPlan__c standard controller Author David Schach ActionPlanCreationController Methods addTask() Creates a blank APTask__c record and adds it to apTasks Sets addedTask to the APTask__c calculateMaxTaskIndex() Calculates the highest task index value for Action Plan Tasks calculateMaxTemplateTaskIndex() Calculates the highest task index value for Action Plan Template Tasks cancel() Action that redirects to previous page checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. checkPendingDeletes() Check if have pending Tasks to delete chooseDisplayField(objectName) Based on the related object name, we display a field from that object as the related record dependantCycle(controllingTask, index) Check for cyclically dependent tasks findActivityEnabledObjects() Get all available WhatId and WhoId objects getAllRelationshipFields() Get a list of all relationship fields to avoid SOQL error for unqueried fields getAPTasks() Gets Tasks related to an Action Plan, or initializes from the Action Plan Template getDefaultTaskRecordTypeId() Find user default task recordtype getDisplayTemplateLookup() Retrieves if template lookup must be displayed getErrorMsg() Getter method to return the error message getHoursOption() Generate picklist of available task due times getNameListSize() The size of the list of related objects available as parents to the Action Plan getNamespacePrefix() Retrieve the Namespace Prefix in case we are in a managed package. Needed for the JavaScript in the page getRecordTypeName() Convert Record Type Id to Record Type Name for the Action Plan's Tasks getRelatedObjectOptions() Getter method with the related object options by default. getSubjectItems() Returns list of Dependent tasks to fill drop down getTaskPriorities() Generate picklist of Task Priorities getTaskRTPicklistValues() Generate picklist of Task Record Types getTasks() Method that retrieves all AP tasks for a Action Plan for Visualforce Page getTaskTypes() Generate picklist of Task Types getTemplateName() Send Action Plan's Template Name to the Visualforce page Because the record has not been saved, the Action Plan Name on initialization is the same as the name of the template hasRelatedObject() Check if the action plan has a related object initCloneActionPlan() Initalize controller for cloning an Action Plan initEditActionPlan() Initalize controller for editing an Action Plan initNewActionPlan() Initalize controller for creating a new Action Plan initNewActionPlanFromTemplate(visualforceContext) Initalize controller for creating a new Action Plan from a template Used so we can instantiate this controller from Invocable Apex initNewActionPlanFromTemplate(visualforceContext, apt) Set up a new Action Plan from a template onLoad() Action on page load to ensure custom setting is created parseRelatedIDs(relatedIDs) Take related IDs parameter and put into a list if each is an Id. Discard invalid IDs queryAPTaskOwners(ap) Query all Task records for the Action Plan's Tasks so we can display the owher name read-only if it is a queue referedObjectInit() Set the Refered object to Create New Action Plan refreshRelatedObjectsLookUp() Refresh the related object lookup field. relatedObjectId() Returns the related object Id from lookup fields. removeTask() Action for removing a existing Action Plan Task retrieveNameRelatedRecord(relatedRecordIDs, relatedObjectName) Query the names of the parent records from the IDs. Some standard objects have special \"name\" fields retrieveTaskFromExistingActionPlan(actionPlanId) Get a Existing Action Plan Task List save() Action that saves a new Action Plan saveAndNew() Saves Action Plan Instance and tasks and returns to the creation page with the previous Action Plan's details. saveHandler() Saves Action Plan Handler. Decides if we are assigning to multiple parent records or just one saveMultipleAP() Save Action Plans for multiple related object instances. Invokes queueable process that creates: ActionPlan, ActionPlanTasksTemplate, and Tasks savePageRef() Saves Action Plan Instance and tasks and redirects to that detail page saveSingleAP() Saves Action Plan Instance and task. Also creates all due dates for tasks, then redirects to the AP list addTask() Creates a blank APTask__c record and adds it to apTasks Sets addedTask to the APTask__c Signature public PageReference addTask() Returns PageReference but we return null for a page refresh See ActionPlanCreationController.addedTask calculateMaxTaskIndex() Calculates the highest task index value for Action Plan Tasks Signature private Double calculateMaxTaskIndex() Returns Double maxIndex calculateMaxTemplateTaskIndex() Calculates the highest task index value for Action Plan Template Tasks Signature private Double calculateMaxTemplateTaskIndex() Returns Double maxIndex cancel() Action that redirects to previous page Signature public PageReference cancel() Returns PageReference previousPage checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. Signature public Boolean checkCycleDependent() Returns Boolean True if there is a cyclic dependency checkPendingDeletes() Check if have pending Tasks to delete Signature private void checkPendingDeletes() chooseDisplayField(objectName) Based on the related object name, we display a field from that object as the related record Signature private String chooseDisplayField(String objectName) Parameters objectName Type: String SObject Name Returns String The display field Author David Schach dependantCycle(controllingTask, index) Check for cyclically dependent tasks Signature private Boolean dependantCycle(APTask__c controllingTask, Integer index) Parameters controllingTask Type: APTask__c The task we are checking index Type: Integer The index of the task(for referencing the controllign one) Returns Boolean Does this task have a dependency? findActivityEnabledObjects() Get all available WhatId and WhoId objects Signature private Set findActivityEnabledObjects() Returns Set Objects that Task can use in WhoId or WhatId getAllRelationshipFields() Get a list of all relationship fields to avoid SOQL error for unqueried fields Signature public List getAllRelationshipFields() Returns List Relationship fields from AcitonPlansUtilities See ActionPlansUtilities.getCustomRelationshipFields Author David Schach getAPTasks() Gets Tasks related to an Action Plan, or initializes from the Action Plan Template Signature public List getAPTasks() Returns List Action Plan Tasks getDefaultTaskRecordTypeId() Find user default task recordtype Signature @testVisible private Id getDefaultTaskRecordTypeId() Returns Id default Task record type Id See ActionPlansUtilities.getDefaultTaskRecordTypeId Author David Schach getDisplayTemplateLookup() Retrieves if template lookup must be displayed Signature public Boolean getDisplayTemplateLookup() Returns Boolean True if there is a related record or if there is a template ID provided getErrorMsg() Getter method to return the error message Signature public String getErrorMsg() Returns String Error message getHoursOption() Generate picklist of available task due times Signature public List getHoursOption() Returns List picklist of 30-minute intervals See ActionPlansUtilities.getHoursOption getNameListSize() The size of the list of related objects available as parents to the Action Plan Signature public Integer getNameListSize() Returns Integer The picklist size Author David Schach getNamespacePrefix() Retrieve the Namespace Prefix in case we are in a managed package. Needed for the JavaScript in the page Signature public String getNamespacePrefix() Returns String Namespace Prefix(LabsActionPlans or empty string) See ActionPlansUtilities.namespacePrefix Author David Schach getRecordTypeName() Convert Record Type Id to Record Type Name for the Action Plan's Tasks Signature public String getRecordTypeName() Returns String Task Record Type Name for the current Action Plan Author David Schach getRelatedObjectOptions() Getter method with the related object options by default. Signature public List getRelatedObjectOptions() Returns List Picklist of all related objects to Action Plan See ActionPlanCreationController.findActivityEnabledObjects getSubjectItems() Returns list of Dependent tasks to fill drop down Signature public List getSubjectItems() Returns List All other AP Task subjects getTaskPriorities() Generate picklist of Task Priorities Signature public List getTaskPriorities() Returns List Picklist of Task.Priority See ActionPlansUtilities.getFieldOptions Author David Schach getTaskRTPicklistValues() Generate picklist of Task Record Types Signature public List getTaskRTPicklistValues() Returns List Picklist of Task.RecordType options See ActionPlansUtilities.getTaskRTPicklistValues Author David Schach getTasks() Method that retrieves all AP tasks for a Action Plan for Visualforce Page Signature public List getTasks() Returns List of AP Task Wrappers for Visualforce Page getTaskTypes() Generate picklist of Task Types Signature public List getTaskTypes() Returns Picklist of Task.Type See ActionPlansUtilities.getFieldOptions Author David Schach getTemplateName() Send Action Plan's Template Name to the Visualforce page Because the record has not been saved, the Action Plan Name on initialization is the same as the name of the template Signature public String getTemplateName() Returns String ActionPlan__c.Name (from ActionPlan__c.Action_Plan_Template__r.Name ) Author David Schach hasRelatedObject() Check if the action plan has a related object Signature public Boolean hasRelatedObject() Returns Boolean Is a relationship field filled? See ActionPlansUtilities.getCustomRelationshipFields initCloneActionPlan() Initalize controller for cloning an Action Plan Signature private void initCloneActionPlan() initEditActionPlan() Initalize controller for editing an Action Plan Signature private void initEditActionPlan() initNewActionPlan() Initalize controller for creating a new Action Plan Signature private void initNewActionPlan() initNewActionPlanFromTemplate(visualforceContext) Initalize controller for creating a new Action Plan from a template Used so we can instantiate this controller from Invocable Apex Signature private void initNewActionPlanFromTemplate(Boolean visualforceContext) Parameters visualforceContext Type: Boolean Are we in Visualforce context? Author David Schach initNewActionPlanFromTemplate(visualforceContext, apt) Set up a new Action Plan from a template Signature private void initNewActionPlanFromTemplate(Boolean visualforceContext, ActionPlanTemplate__c apt) Parameters visualforceContext Type: Boolean Are we in Visualforce context? apt Type: ActionPlanTemplate__c ActionPlanTemplate__c record Author David Schach onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null(required for page actions method) See ActionPlansUtilities.onPageLoad parseRelatedIDs(relatedIDs) Take related IDs parameter and put into a list if each is an Id. Discard invalid IDs Signature private List parseRelatedIDs(String relatedIDs) Parameters relatedIDs Type: String The page URL parameters Returns List A list(not set) of all related IDs from the URL Author David Schach queryAPTaskOwners(ap) Query all Task records for the Action Plan's Tasks so we can display the owher name read-only if it is a queue Signature private Map queryAPTaskOwners(ActionPlan__c ap) Parameters ap Type: ActionPlan__c The Action Plan Returns Map of Task by Id Author David Schach referedObjectInit() Set the Refered object to Create New Action Plan Signature @TestVisible private void referedObjectInit() See ActionPlanCreationController.retrieveNameRelatedRecord refreshRelatedObjectsLookUp() Refresh the related object lookup field. Signature public PageReference refreshRelatedObjectsLookUp() Returns PageReference null See ActionPlansUtilities.getEscapedPageParameter relatedObjectId() Returns the related object Id from lookup fields. Signature @testVisible private Id relatedObjectId() Returns Id the related object id removeTask() Action for removing a existing Action Plan Task Signature public PageReference removeTask() Returns PageReference null to refresh current page retrieveNameRelatedRecord(relatedRecordIDs, relatedObjectName) Query the names of the parent records from the IDs. Some standard objects have special \"name\" fields Signature private List retrieveNameRelatedRecord(Set relatedRecordIDs, String relatedObjectName) Parameters relatedRecordIDs Type: Set The related object IDs relatedObjectName Type: String The name of the SObject for which the IDs refer Returns List List of related record names retrieveTaskFromExistingActionPlan(actionPlanId) Get a Existing Action Plan Task List Signature private List retrieveTaskFromExistingActionPlan(Id actionPlanId) Parameters actionPlanId Type: Id Parent ActionPlan__c Id Returns List All template tasks save() Action that saves a new Action Plan Signature public PageReference save() Returns PageReference null See ActionPlanCreationController.checkCycleDependent , ActionPlanCreationController.saveHandler saveAndNew() Saves Action Plan Instance and tasks and returns to the creation page with the previous Action Plan's details. Signature public PageReference saveAndNew() Returns newPage saveHandler() Saves Action Plan Handler. Decides if we are assigning to multiple parent records or just one Signature private PageReference saveHandler() Returns Pagereference called Method See ActionPlanCreationController.save , ActionPlanCreationController.savePageRef , ActionPlanCreationController.saveMultipleAP saveMultipleAP() Save Action Plans for multiple related object instances. Invokes queueable process that creates: ActionPlan, ActionPlanTasksTemplate, and Tasks Signature @TestVisible private PageReference saveMultipleAP() Returns Pagereference(null or ActionPlansHome with confirmation) See ActionPlansUtilities.getEscapedPageParameter savePageRef() Saves Action Plan Instance and tasks and redirects to that detail page Signature private PageReference savePageRef() Returns newPage See ActionPlanCreationController.saveSingleAP saveSingleAP() Saves Action Plan Instance and task. Also creates all due dates for tasks, then redirects to the AP list Signature private Id saveSingleAP() Returns Id Action Plan Id ActionPlanCreationController.ApTaskWrapper Wrapper Class for AP Task SObject Signature public class ApTaskWrapper Rodrigo Birriel David Schach 08/01/2010 4/2022 ActionPlanCreationController.ApTaskWrapper Properties Name Signature Description ap private ActionPlan__c ap Action Plan in wrapper apt public APTask__c apt Action Plan Task in wrapper assignToOwner private Boolean assignToOwner Does blank User field default to parent owner? Filled from custom setting isLast public Boolean isLast Last Task position public Integer position Task position(order on the page) userRequired public Boolean userRequired Defines if we set the APTask__c Assigned To field to required ActionPlanCreationController.ApTaskWrapper Constructors ApTaskWrapper(ap, apTask, position, apTaskRTId) Constructor for wrapper to display related APTask__c records on ActionPlan__c create/edit page ApTaskWrapper(ap, apTask, position, apTaskRTId) Constructor for wrapper to display related APTask__c records on ActionPlan__c create/edit page Signature public ApTaskWrapper(ActionPlan__c ap, APTask__c apTask, Integer position, Id apTaskRTId) Parameters ap Type: ActionPlan__c Action Plan record apTask Type: APTask__c Action Plan Task record position Type: Integer Position(in the list of AP Tasks) on the Page apTaskRTId Type: Id The Record Type of the Task eventually to be created ActionPlanCreationController.ApTaskWrapper Methods getUserRender() Logic for determining how to show the Assigned To field for the AP Task If we show the UserLookup, set the UserRequired property to determine if the field is required getUserRender() Logic for determining how to show the Assigned To field for the AP Task If we show the UserLookup, set the UserRequired property to determine if the field is required Signature public String getUserRender() Returns String UserReadOnly, UserLookup, OwnerPlaceholder Author David Schach ActionPlanCreationController.OwnerWrapper Wrapper class for Task owner, with Name and Id. Used to determine if owned by a Queue Signature public class OwnerWrapper ActionPlanCreationController.OwnerWrapper Properties Name Signature Description tOwnerId public Id tOwnerId Task Owner Id(User or Queue) tOwnerName public String tOwnerName Task Owner Name(User or Queue) ActionPlanCreationController.OwnerWrapper Constructors OwnerWrapper(taskOwnerId, taskOwnerName) Constructor for OwnerWrapper OwnerWrapper(taskOwnerId, taskOwnerName) Constructor for OwnerWrapper Signature public OwnerWrapper(Id taskOwnerId, String taskOwnerName) Parameters taskOwnerId Type: Id Task.OwnerId taskOwnerName Type: String Task.Owner.Name (User or Queue) Author David Schach"
+ "text": "ActionPlanCreationController Controller for ActionPlan Create and ActionPlan Edit screens(the same page overrides both actions) Signature public with sharing class ActionPlanCreationController See ActionPlanCreateInvocable Authors Rodrigo Birriel , David Schach Since 2022 ActionPlanCreationController Properties Name Signature Annotations Description actionPlan private ActionPlan__c actionPlan @TestVisible Page Action Plan addedTask private APTask__c addedTask @testVisible The APTask__c instantiated when clicking the Add New Task link on the page apTasks private List apTasks @testVisible Stored APTask__c records for the page. See getAPTasks() canDisplayReminder public Boolean canDisplayReminder Is the User able to see reminders? cloneParam private String cloneParam Are we cloning an Action Plan? If so, this is 1. Otherwise, it is 0. errorMsg private String errorMsg Error message to display(outside of Apex.PageMessages) hasRelated public Boolean hasRelated Is there a related record or template when we load the page? hasRelatedObject public Boolean hasRelatedObject Set to true if a relationship field is filled inVisualforceContext private Boolean inVisualforceContext @testVisible Esure we are working in Visualforce context. For future functionality allowing invocable Apex to call this class directly mapTasksListBkp private Map mapTasksListBkp Map to retrieve our APTaskWrapper records by APTask Id Currently unused; should be deleted if package testing passes pendingDeletes private List pendingDeletes Temporary list of APTasks to delete, based on taskIndex refId public String refId Getter and Setter for refId(related record Id) refType public String refType Getter and Setter for RefType(related object Name) relatedFieldName public String relatedFieldName Get the specific lookup field used by this Action Plan relatedObjDisplayField public String relatedObjDisplayField The field on the related record we use to display on the ActionPlan.(Not Name for Case and Contract) relatedObjectName public String relatedObjectName The name of the object(the same as the relationship field, except for standard objects) the AP is related to. NOT the name of the related record relatedObjectOptions private List relatedObjectOptions Picklist of related object options, generated from the Field Set on Action Plan relatedObjLabelPlural public String relatedObjLabelPlural Related Object Name(Plural) relatedObjNameList private List relatedObjNameList @TestVisible We need a list of parent RECORD names when showing all the parents when we mass-create action plans This initializes the list, and then divides it into three parts for three columns on the page. relatedRecordIDs private Set relatedRecordIDs Related Record IDs relatedRecordsOne public List relatedRecordsOne Column one of related records relatedRecordsThree public List relatedRecordsThree Column three of related records relatedRecordsTwo public List relatedRecordsTwo Column two of related records relationshipFields private List relationshipFields Memoize relationship fields subtitle public String subtitle The subtitle shown on the page taskHasRecordType public Boolean taskHasRecordType If the Task object has Record Types enabled, return true taskIndex private Double taskIndex Max taskIndex for this Action Plan taskOwnerMap public Map taskOwnerMap Map of Action Plan Task Id to the Task owner(or APTask User if no Task has been created) taskPriorities private List taskPriorities Picklist of Task.Priority values taskTypes private List taskTypes Picklist of Task.Type values templateId public Id templateId TemplateId is pulled from the page parameters and tells us if we're making an Action Plan based on a template It can also be set by choosing a template when applying a template to one or more records ActionPlanCreationController Constructors ActionPlanCreationController(stdController) Constructor for ActionPlan Create/Edit Page ActionPlanCreationController(stdController) Constructor for ActionPlan Create/Edit Page Signature public ActionPlanCreationController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController ActionPlan__c standard controller Author David Schach ActionPlanCreationController Methods addTask() Creates a blank APTask__c record and adds it to apTasks Sets addedTask to the APTask__c calculateMaxTaskIndex() Calculates the highest task index value for Action Plan Tasks calculateMaxTemplateTaskIndex() Calculates the highest task index value for Action Plan Template Tasks cancel() Action that redirects to previous page checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. checkHasRelated() Check all relationship fields and return true if at least one is filled checkPendingDeletes() Check if have pending Tasks to delete chooseDisplayField(objectName) Based on the related object name, we display a field from that object as the related record dependantCycle(controllingTask, index) Check for cyclically dependent tasks findActivityEnabledObjects() Get all available WhatId and WhoId objects getAllRelationshipFields() Get a list of all relationship fields to avoid SOQL error for unqueried fields getAPTasks() Gets Tasks related to an Action Plan, or initializes from the Action Plan Template getDefaultTaskRecordTypeId() Find user default task recordtype getDisplayTemplateLookup() Retrieves if template lookup must be displayed getErrorMsg() Getter method to return the error message getHoursOption() Generate picklist of available task due times getNameListSize() The size of the list of related objects available as parents to the Action Plan getNamespacePrefix() Retrieve the Namespace Prefix in case we are in a managed package. Needed for the JavaScript in the page getRecordTypeName() Convert Record Type Id to Record Type Name for the Action Plan's Tasks getRelatedObjectOptions() Getter method with the related object options by default. getSubjectItems() Returns list of Dependent tasks to fill drop down getTaskPriorities() Generate picklist of Task Priorities getTaskRTPicklistValues() Generate picklist of Task Record Types getTasks() Method that retrieves all AP tasks for a Action Plan for Visualforce Page getTaskTypes() Generate picklist of Task Types getTemplateName() Send Action Plan's Template Name to the Visualforce page Because the record has not been saved, the Action Plan Name on initialization is the same as the name of the template hasRelatedObject() Check if the action plan has a related object initCloneActionPlan() Initalize controller for cloning an Action Plan initEditActionPlan() Initalize controller for editing an Action Plan initNewActionPlan() Initalize controller for creating a new Action Plan initNewActionPlanFromTemplate(visualforceContext) Initalize controller for creating a new Action Plan from a template Used so we can instantiate this controller from Invocable Apex initNewActionPlanFromTemplate(visualforceContext, apt) Set up a new Action Plan from a template onLoad() Action on page load to ensure custom setting is created parseRelatedIDs(relatedIDs) Take related IDs parameter and put into a list if each is an Id. Discard invalid IDs queryAPTaskOwners(ap) Query all Task records for the Action Plan's Tasks so we can display the owher name read-only if it is a queue queryRecord(recordId) Main code for lightning lookup record selection. Included in this class because we use this as the controller for our main page referedObjectInit() Set the Refered object to Create New Action Plan refreshRelatedObjectsLookUp() Refresh the related object lookup field. relatedObjectId() Returns the related object Id from lookup fields. removeTask() Action for removing a existing Action Plan Task retrieveNameRelatedRecord(relatedRecordIDs, relatedObjectName) Query the names of the parent records from the IDs. Some standard objects have special \"name\" fields retrieveTaskFromExistingActionPlan(actionPlanId) Get a Existing Action Plan Task List save() Action that saves a new Action Plan saveAndNew() Saves Action Plan Instance and tasks and returns to the creation page with the previous Action Plan's details. saveHandler() Saves Action Plan Handler. Decides if we are assigning to multiple parent records or just one saveMultipleAP() Save Action Plans for multiple related object instances. Invokes queueable process that creates: ActionPlan, ActionPlanTasksTemplate, and Tasks savePageRef() Saves Action Plan Instance and tasks and redirects to that detail page saveSingleAP() Saves Action Plan Instance and task. Also creates all due dates for tasks, then redirects to the AP list searchTemplates(searchText) Main code for lightning lookup search. Included in this class because we use this as the controller for our main page addTask() Creates a blank APTask__c record and adds it to apTasks Sets addedTask to the APTask__c Signature public PageReference addTask() Returns PageReference but we return null for a page refresh See ActionPlanCreationController.addedTask calculateMaxTaskIndex() Calculates the highest task index value for Action Plan Tasks Signature private Double calculateMaxTaskIndex() Returns Double maxIndex calculateMaxTemplateTaskIndex() Calculates the highest task index value for Action Plan Template Tasks Signature private Double calculateMaxTemplateTaskIndex() Returns Double maxIndex cancel() Action that redirects to previous page Signature public PageReference cancel() Returns PageReference previousPage checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. Signature public Boolean checkCycleDependent() Returns Boolean True if there is a cyclic dependency checkHasRelated() Check all relationship fields and return true if at least one is filled Signature private Boolean checkHasRelated() Returns Boolean Is at least one lookup to a parent record populated? checkPendingDeletes() Check if have pending Tasks to delete Signature private void checkPendingDeletes() chooseDisplayField(objectName) Based on the related object name, we display a field from that object as the related record Signature private String chooseDisplayField(String objectName) Parameters objectName Type: String SObject Name Returns String The display field Author David Schach dependantCycle(controllingTask, index) Check for cyclically dependent tasks Signature private Boolean dependantCycle(APTask__c controllingTask, Integer index) Parameters controllingTask Type: APTask__c The task we are checking index Type: Integer The index of the task(for referencing the controllign one) Returns Boolean Does this task have a dependency? findActivityEnabledObjects() Get all available WhatId and WhoId objects Signature private Set findActivityEnabledObjects() Returns Set Objects that Task can use in WhoId or WhatId getAllRelationshipFields() Get a list of all relationship fields to avoid SOQL error for unqueried fields Signature public List getAllRelationshipFields() Returns List Relationship fields from AcitonPlansUtilities See ActionPlansUtilities.getCustomRelationshipFields Author David Schach getAPTasks() Gets Tasks related to an Action Plan, or initializes from the Action Plan Template Signature public List getAPTasks() Returns List Action Plan Tasks getDefaultTaskRecordTypeId() Find user default task recordtype Signature @testVisible private Id getDefaultTaskRecordTypeId() Returns Id default Task record type Id See ActionPlansUtilities.getDefaultTaskRecordTypeId Author David Schach getDisplayTemplateLookup() Retrieves if template lookup must be displayed Signature public Boolean getDisplayTemplateLookup() Returns Boolean True if there is a related record or if there is a template ID provided getErrorMsg() Getter method to return the error message Signature public String getErrorMsg() Returns String Error message getHoursOption() Generate picklist of available task due times Signature public List getHoursOption() Returns List picklist of 30-minute intervals See ActionPlansUtilities.getHoursOption getNameListSize() The size of the list of related objects available as parents to the Action Plan Signature public Integer getNameListSize() Returns Integer The picklist size Author David Schach getNamespacePrefix() Retrieve the Namespace Prefix in case we are in a managed package. Needed for the JavaScript in the page Signature public String getNamespacePrefix() Returns String Namespace Prefix(LabsActionPlans or empty string) See ActionPlansUtilities.namespacePrefix Author David Schach getRecordTypeName() Convert Record Type Id to Record Type Name for the Action Plan's Tasks Signature public String getRecordTypeName() Returns String Task Record Type Name for the current Action Plan Author David Schach getRelatedObjectOptions() Getter method with the related object options by default. Signature public List getRelatedObjectOptions() Returns List Picklist of all related objects to Action Plan See ActionPlanCreationController.findActivityEnabledObjects getSubjectItems() Returns list of Dependent tasks to fill drop down Signature public List getSubjectItems() Returns List All other AP Task subjects getTaskPriorities() Generate picklist of Task Priorities Signature public List getTaskPriorities() Returns List Picklist of Task.Priority See ActionPlansUtilities.getFieldOptions Author David Schach getTaskRTPicklistValues() Generate picklist of Task Record Types Signature public List getTaskRTPicklistValues() Returns List Picklist of Task.RecordType options See ActionPlansUtilities.getTaskRTPicklistValues Author David Schach getTasks() Method that retrieves all AP tasks for a Action Plan for Visualforce Page Signature public List getTasks() Returns List of AP Task Wrappers for Visualforce Page getTaskTypes() Generate picklist of Task Types Signature public List getTaskTypes() Returns Picklist of Task.Type See ActionPlansUtilities.getFieldOptions Author David Schach getTemplateName() Send Action Plan's Template Name to the Visualforce page Because the record has not been saved, the Action Plan Name on initialization is the same as the name of the template Signature public String getTemplateName() Returns String ActionPlan__c.Name (from ActionPlan__c.Action_Plan_Template__r.Name ) Author David Schach hasRelatedObject() Check if the action plan has a related object Signature public Boolean hasRelatedObject() Returns Boolean Is a relationship field filled? See ActionPlansUtilities.getCustomRelationshipFields initCloneActionPlan() Initalize controller for cloning an Action Plan Signature private void initCloneActionPlan() initEditActionPlan() Initalize controller for editing an Action Plan Signature private void initEditActionPlan() initNewActionPlan() Initalize controller for creating a new Action Plan Signature private void initNewActionPlan() initNewActionPlanFromTemplate(visualforceContext) Initalize controller for creating a new Action Plan from a template Used so we can instantiate this controller from Invocable Apex Signature private void initNewActionPlanFromTemplate(Boolean visualforceContext) Parameters visualforceContext Type: Boolean Are we in Visualforce context? Author David Schach initNewActionPlanFromTemplate(visualforceContext, apt) Set up a new Action Plan from a template Signature private void initNewActionPlanFromTemplate(Boolean visualforceContext, ActionPlanTemplate__c apt) Parameters visualforceContext Type: Boolean Are we in Visualforce context? apt Type: ActionPlanTemplate__c ActionPlanTemplate__c record Author David Schach onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null(required for page actions method) See ActionPlansUtilities.onPageLoad parseRelatedIDs(relatedIDs) Take related IDs parameter and put into a list if each is an Id. Discard invalid IDs Signature private List parseRelatedIDs(String relatedIDs) Parameters relatedIDs Type: String The page URL parameters Returns List A list(not set) of all related IDs from the URL Author David Schach queryAPTaskOwners(ap) Query all Task records for the Action Plan's Tasks so we can display the owher name read-only if it is a queue Signature private Map queryAPTaskOwners(ActionPlan__c ap) Parameters ap Type: ActionPlan__c The Action Plan Returns Map of Task by Id Author David Schach queryRecord(recordId) Main code for lightning lookup record selection. Included in this class because we use this as the controller for our main page Signature @RemoteAction public static List queryRecord(String recordId) Parameters recordId Type: String Single record ID for chosen Action Plan Template Returns List Returned records See ActionPlanSectionHeaderController Since 2023-02 referedObjectInit() Set the Refered object to Create New Action Plan Signature @TestVisible private void referedObjectInit() See ActionPlanCreationController.retrieveNameRelatedRecord refreshRelatedObjectsLookUp() Refresh the related object lookup field. Signature public PageReference refreshRelatedObjectsLookUp() Returns PageReference null See ActionPlansUtilities.getEscapedPageParameter relatedObjectId() Returns the related object Id from lookup fields. Signature @testVisible private Id relatedObjectId() Returns Id the related object id removeTask() Action for removing a existing Action Plan Task Signature public PageReference removeTask() Returns PageReference null to refresh current page retrieveNameRelatedRecord(relatedRecordIDs, relatedObjectName) Query the names of the parent records from the IDs. Some standard objects have special \"name\" fields Signature private List retrieveNameRelatedRecord(Set relatedRecordIDs, String relatedObjectName) Parameters relatedRecordIDs Type: Set The related object IDs relatedObjectName Type: String The name of the SObject for which the IDs refer Returns List List of related record names retrieveTaskFromExistingActionPlan(actionPlanId) Get a Existing Action Plan Task List Signature private List retrieveTaskFromExistingActionPlan(Id actionPlanId) Parameters actionPlanId Type: Id Parent ActionPlan__c Id Returns List All template tasks save() Action that saves a new Action Plan Signature public PageReference save() Returns PageReference null See ActionPlanCreationController.checkCycleDependent , ActionPlanCreationController.saveHandler saveAndNew() Saves Action Plan Instance and tasks and returns to the creation page with the previous Action Plan's details. Signature public PageReference saveAndNew() Returns newPage saveHandler() Saves Action Plan Handler. Decides if we are assigning to multiple parent records or just one Signature private PageReference saveHandler() Returns Pagereference called Method See ActionPlanCreationController.save , ActionPlanCreationController.savePageRef , ActionPlanCreationController.saveMultipleAP saveMultipleAP() Save Action Plans for multiple related object instances. Invokes queueable process that creates: ActionPlan, ActionPlanTasksTemplate, and Tasks Signature @TestVisible private PageReference saveMultipleAP() Returns Pagereference(null or ActionPlansHome with confirmation) See ActionPlansUtilities.getEscapedPageParameter savePageRef() Saves Action Plan Instance and tasks and redirects to that detail page Signature private PageReference savePageRef() Returns newPage See ActionPlanCreationController.saveSingleAP saveSingleAP() Saves Action Plan Instance and task. Also creates all due dates for tasks, then redirects to the AP list Signature private Id saveSingleAP() Returns Id Action Plan Id searchTemplates(searchText) Main code for lightning lookup search. Included in this class because we use this as the controller for our main page Signature @RemoteAction public static List searchTemplates(String searchText) Parameters searchText Type: String Search string(escaped!) to get matching AP Templates Returns List Returned records See ActionPlanSectionHeaderController Since 2023-02 ActionPlanCreationController.ApTaskWrapper Wrapper Class for AP Task SObject Note: I don't like the way we decide to show the User field - especially if we want to assign to a Queue. This part should be refactored next, probably with a User/Queue picklist depending on org settings Signature public class ApTaskWrapper Author Rodrigo Birriel Since 08/01/2010 Author David Schach Since 2022-04 ActionPlanCreationController.ApTaskWrapper Properties Name Signature Description ap private ActionPlan__c ap Action Plan in wrapper apt public APTask__c apt Action Plan Task in wrapper assignToOwner private Boolean assignToOwner Does blank User field default to parent owner? Filled from custom setting canEditUserField private Boolean canEditUserField Because it uses a describe call, check user permission once, in constructor isLast public Boolean isLast Last Task pageHasRelatedIds private Boolean pageHasRelatedIds Store if page has relatedIDs once; set in constructor pageTemplateId private String pageTemplateId Store page template ID once, in constructor position public Integer position Task position(order on the page) userRequired public Boolean userRequired Defines if we set the APTask__c Assigned To field to required ActionPlanCreationController.ApTaskWrapper Constructors ApTaskWrapper(ap, apTask, position, apTaskRTId) Constructor for wrapper to display related APTask__c records on ActionPlan__c create/edit page ApTaskWrapper(ap, apTask, position, apTaskRTId) Constructor for wrapper to display related APTask__c records on ActionPlan__c create/edit page Signature public ApTaskWrapper(ActionPlan__c ap, APTask__c apTask, Integer position, Id apTaskRTId) Parameters ap Type: ActionPlan__c Action Plan record apTask Type: APTask__c Action Plan Task record position Type: Integer Position(in the list of AP Tasks) on the Page apTaskRTId Type: Id The Record Type of the Task eventually to be created ActionPlanCreationController.ApTaskWrapper Methods getUserRender() Logic for determining how to show the Assigned To field for the AP Task If we show the UserLookup, set the UserRequired property to determine if the field is required getUserRender() Logic for determining how to show the Assigned To field for the AP Task If we show the UserLookup, set the UserRequired property to determine if the field is required Signature public String getUserRender() Returns String UserReadOnly, UserLookup, OwnerPlaceholder Author David Schach ActionPlanCreationController.OwnerWrapper Wrapper class for Task owner, with Name and Id. Used to determine if owned by a Queue Signature public class OwnerWrapper ActionPlanCreationController.OwnerWrapper Properties Name Signature Description tOwnerId public Id tOwnerId Task Owner Id(User or Queue) tOwnerName public String tOwnerName Task Owner Name(User or Queue) ActionPlanCreationController.OwnerWrapper Constructors OwnerWrapper(taskOwnerId, taskOwnerName) Constructor for OwnerWrapper OwnerWrapper(taskOwnerId, taskOwnerName) Constructor for OwnerWrapper Signature public OwnerWrapper(Id taskOwnerId, String taskOwnerName) Parameters taskOwnerId Type: Id Task.OwnerId taskOwnerName Type: String Task.Owner.Name (User or Queue) Author David Schach"
},
{
"title": "ActionPlanDetailController",
"fileName": "ActionPlanDetailController.html",
- "text": "ActionPlanDetailController Signature public with sharing class ActionPlanDetailController Rodrigo Birriel David Schach 2022 ActionPlanDetailController Properties Name Signature Description actionPlan private ActionPlan__c actionPlan The Action Plan apTaskWrapperList private List apTaskWrapperList Memoized TaskWrappers for display on the page canDisplayReminder public Boolean canDisplayReminder Does the user have reminders enabled? If not, do not shrae the reminder option hasRecordType public Boolean hasRecordType Does the org have Record Types enabled for Task SObject ActionPlanDetailController Constructors ActionPlanDetailController(stdController) Extension Constructor ActionPlanDetailController(stdController) Extension Constructor Signature public ActionPlanDetailController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController ActionPlan__c Standard Controller ActionPlanDetailController Methods deletePlan() Deletes the current Action Plan loaded and redirects to the AP List getActionPlanTasks() Collect and return all TaskWrappers getCanShare() If we have no share object, we don't need to show a Share button getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. gethasControllingTasks() Display ControllingTasks column only if there are controlling tasks getRecordTypeName() Convert AP Task Record Type Id to Record Type Name getRelatedObjectLabel() The label of the Action Plan's parent record SObject getrelatedRecordName() The name of the parent record - show a different field based on SObject Type getVersion() Checks if Action Plan Template has been changed since the creation of the Action Plan. onLoad() Action on page load to ensure custom setting is created deletePlan() Deletes the current Action Plan loaded and redirects to the AP List Signature public PageReference deletePlan() Returns PageReference Page to go to after deleting ActionPlan__c See ActionPlansUtilities.getIsLex getActionPlanTasks() Collect and return all TaskWrappers Signature public List getActionPlanTasks() Returns List List of TaskWrapper for this Action Plan getCanShare() If we have no share object, we don't need to show a Share button Signature public Boolean getCanShare() Returns Boolean Does the user have permission to share this Action Plan? Author David Schach getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. Signature public Boolean getCanTransfer() Returns Boolean yes/no Author David Schach gethasControllingTasks() Display ControllingTasks column only if there are controlling tasks Signature public Boolean gethasControllingTasks() Returns Boolean is the Controller__c field populated for any Action Plan Tasks? Author David Schach getRecordTypeName() Convert AP Task Record Type Id to Record Type Name Signature public String getRecordTypeName() Returns Record Type Name getRelatedObjectLabel() The label of the Action Plan's parent record SObject Signature public String getRelatedObjectLabel() Returns String Label of the object related to this Action Plan getrelatedRecordName() The name of the parent record - show a different field based on SObject Type Signature public String getrelatedRecordName() Returns String name of the object related to this Action Plan getVersion() Checks if Action Plan Template has been changed since the creation of the Action Plan. Signature public Boolean getVersion() Returns Boolean Was the AP's template modified after the Action Plan was created? onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null(required for page actions method) See ActionPlansUtilities.onPageLoad ActionPlanDetailController.TaskWrapper Wrapper for Action Plan Task It contains the Action Plan Task and the Task Id Signature public class TaskWrapper ActionPlanDetailController.TaskWrapper Properties Name Signature Description apt public APTask__c apt The Action Plan Task taskId public Id taskId The(standard) Task Id taskOwnerId public Id taskOwnerId The(standard) Task OwnerId taskOwnerName public String taskOwnerName The(standard) Task OwnerId ActionPlanDetailController.TaskWrapper Constructors TaskWrapper(aptParam, taskParam) Constructor for the task wrapper TaskWrapper(aptParam, taskParam) Constructor for the task wrapper Signature public TaskWrapper(APTask__c aptParam, Task taskParam) Parameters aptParam Type: APTask__c Action Plan Task Template taskParam Type: Task TaskId(for the standard object Task )"
+ "text": "ActionPlanDetailController Signature public with sharing class ActionPlanDetailController Authors Rodrigo Birriel , David Schach Since 2022 ActionPlanDetailController Properties Name Signature Description actionPlan private ActionPlan__c actionPlan The Action Plan apTaskWrapperList private List apTaskWrapperList Memoized TaskWrappers for display on the page canDisplayReminder public Boolean canDisplayReminder Does the user have reminders enabled? If not, do not shrae the reminder option hasRecordType public Boolean hasRecordType Does the org have Record Types enabled for Task SObject ActionPlanDetailController Constructors ActionPlanDetailController(stdController) Extension Constructor ActionPlanDetailController(stdController) Extension Constructor Signature public ActionPlanDetailController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController ActionPlan__c Standard Controller ActionPlanDetailController Methods deletePlan() Deletes the current Action Plan loaded and redirects to the AP List getActionPlanTasks() Collect and return all TaskWrappers getCanShare() If we have no share object, we don't need to show a Share button getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. gethasControllingTasks() Display ControllingTasks column only if there are controlling tasks getRecordTypeName() Convert AP Task Record Type Id to Record Type Name getRelatedObjectLabel() The label of the Action Plan's parent record SObject getrelatedRecordName() The name of the parent record - show a different field based on SObject Type getVersion() Checks if Action Plan Template has been changed since the creation of the Action Plan. onLoad() Action on page load to ensure custom setting is created deletePlan() Deletes the current Action Plan loaded and redirects to the AP List Signature public PageReference deletePlan() Returns PageReference Page to go to after deleting ActionPlan__c See ActionPlansUtilities.getIsLex getActionPlanTasks() Collect and return all TaskWrappers Signature public List getActionPlanTasks() Returns List List of TaskWrapper for this Action Plan getCanShare() If we have no share object, we don't need to show a Share button Signature public Boolean getCanShare() Returns Boolean Does the user have permission to share this Action Plan? Author David Schach getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. Signature public Boolean getCanTransfer() Returns Boolean yes/no Author David Schach gethasControllingTasks() Display ControllingTasks column only if there are controlling tasks Signature public Boolean gethasControllingTasks() Returns Boolean is the Controller__c field populated for any Action Plan Tasks? Author David Schach getRecordTypeName() Convert AP Task Record Type Id to Record Type Name Signature public String getRecordTypeName() Returns Record Type Name getRelatedObjectLabel() The label of the Action Plan's parent record SObject Signature public String getRelatedObjectLabel() Returns String Label of the object related to this Action Plan getrelatedRecordName() The name of the parent record - show a different field based on SObject Type Signature public String getrelatedRecordName() Returns String name of the object related to this Action Plan getVersion() Checks if Action Plan Template has been changed since the creation of the Action Plan. Signature public Boolean getVersion() Returns Boolean Was the AP's template modified after the Action Plan was created? onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null(required for page actions method) See ActionPlansUtilities.onPageLoad ActionPlanDetailController.TaskWrapper Wrapper for Action Plan Task It contains the Action Plan Task and the Task Id Signature public class TaskWrapper ActionPlanDetailController.TaskWrapper Properties Name Signature Description apt public APTask__c apt The Action Plan Task taskId public Id taskId The(standard) Task Id taskOwnerId public Id taskOwnerId The(standard) Task OwnerId taskOwnerName public String taskOwnerName The(standard) Task OwnerId tsk public Task tsk The Action Plan Task related Task ActionPlanDetailController.TaskWrapper Constructors TaskWrapper(aptParam, taskParam) Constructor for the task wrapper TaskWrapper(aptParam, taskParam) Constructor for the task wrapper Signature public TaskWrapper(APTask__c aptParam, Task taskParam) Parameters aptParam Type: APTask__c Action Plan Task Template taskParam Type: Task TaskId(for the standard object Task )"
},
{
"title": "ActionPlanTemplateCreationController",
"fileName": "ActionPlanTemplateCreationController.html",
- "text": "ActionPlanTemplateCreationController Extension for Action Plan Template Create/Edit page Signature public with sharing class ActionPlanTemplateCreationController Rodrigo Birriel David Schach v3 ActionPlanTemplateCreationController Properties Name Signature Annotations Description actionPlanTemplate private ActionPlanTemplate__c actionPlanTemplate @testVisible The Action Plan Template for this page aptTasks private List aptTasks @TestVisible canDisplayReminder public Boolean canDisplayReminder Does the user have reminders enabled? errorMsg private String errorMsg Store the value of the error message pendingTemplateTaskDeletes private List pendingTemplateTaskDeletes @testVisible subTitle public String subTitle Page SubTitle taskHasRecordType public Boolean taskHasRecordType Does the Task object have Record Types enabled? taskIndex private Double taskIndex taskPriorities private List taskPriorities Generate picklist of Task Priority taskTypes private List taskTypes Generate picklist of Task Type templateId private Id templateId If we are making this template from another template, the Id is stored here ActionPlanTemplateCreationController Constructors ActionPlanTemplateCreationController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. Then we need to check if we are cloning the template; in that case clone the template without Id. ActionPlanTemplateCreationController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. Then we need to check if we are cloning the template; in that case clone the template without Id. Signature public ActionPlanTemplateCreationController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController Standard Controller(ActionPlanTemplate__c ) ActionPlanTemplateCreationController Methods addTemplateTask() Add a new row to the Template Tasks(but do not commit to the database) calculateTaskIndexValue() Calculates the highest task index value cancelTemplate() Cancel changes checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. dependantCycle(inspectedTask, index) Check for dependent tasks doSave() Standalone save action so the redirects are different for Save vs Save and New First delete pending deletions, then upsert the template and its tasks, then update dependencies getDefaultTaskRecordTypeId() Find user default recordtype getErrorMsg() Getter method to return the error message from action plans utilities getHoursOption() Get the reminder time picklist options from the central utilities class getTaskPriorities() Generate picklist of Task Priorities getTaskRTPicklistValues() Generate picklist of Task Record Types getTaskTypes() Generate a picklist of Task Type getTemplateSubjectItems() Call method getTemplateSubjectItems() getTemplateTasks() Get all tasks related to the Action Template. getTemplateTaskSize() Return size of the APTTemplate Tasks List. getTemplateWrappers() Iterate over aptTasks and generate wrappers for display on the page onLoad() Action on page load to ensure custom setting is created queryAPTTasks(templateId) Single query for ActionPlan Template Tasks removeTemplateTask() Remove this row from the Template Tasks(but do not commit to the database) saveAndNew() Save and go to New page for Save and New saveTemplate() Saves Action Plan Template and all tasks, then redirects to the AP template list. First check for pending templates for delete; in case that exists then delete those objects. Then insert or update the Action Plan Template pending to save and save tasks to the template and attach relation to Action Plan. templateCycleDependent() Checks if Action Plans Tasks has cyclic dependency. addTemplateTask() Add a new row to the Template Tasks(but do not commit to the database) Signature public void addTemplateTask() calculateTaskIndexValue() Calculates the highest task index value Signature public Double calculateTaskIndexValue() Returns Double maxIndex cancelTemplate() Cancel changes Signature public PageReference cancelTemplate() Returns PageReference Object home or Template detail page checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. Signature public PageReference checkCycleDependent() Returns PageReference to allow pass-through of save action dependantCycle(inspectedTask, index) Check for dependent tasks Signature private Boolean dependantCycle(APTemplateTask__c inspectedTask, Integer index) Parameters inspectedTask Type: APTemplateTask__c We check against a specific task index Type: Integer The index(position) of the template task Returns Boolean Is there a dependency for this task? doSave() Standalone save action so the redirects are different for Save vs Save and New First delete pending deletions, then upsert the template and its tasks, then update dependencies Signature private Boolean doSave() Returns Boolean Do we have an error? getDefaultTaskRecordTypeId() Find user default recordtype Signature public Id getDefaultTaskRecordTypeId() Returns Id The org default Task RecordTypeId See ActionPlansUtilities.getDefaultTaskRecordTypeId getErrorMsg() Getter method to return the error message from action plans utilities Signature public String getErrorMsg() Returns String errorMsg See ActionPlanTemplateCreationController.errorMsg getHoursOption() Get the reminder time picklist options from the central utilities class Signature public List getHoursOption() Returns List Picklist of reminder times See ActionPlansUtilities.getHoursOption getTaskPriorities() Generate picklist of Task Priorities Signature public List getTaskPriorities() Returns List Picklist of Task.Priority See ActionPlansUtilities.getFieldOptions Author David Schach getTaskRTPicklistValues() Generate picklist of Task Record Types Signature public List getTaskRTPicklistValues() Returns List A picklist of available Record Types See ActionPlansUtilities.getTaskRTPicklistValues getTaskTypes() Generate a picklist of Task Type Signature public List getTaskTypes() Returns List Picklist of Task.Type See ActionPlansUtilities.getFieldOptions Author David Schach getTemplateSubjectItems() Call method getTemplateSubjectItems() Signature public List getTemplateSubjectItems() Returns List the picklist of Task subjects getTemplateTasks() Get all tasks related to the Action Template. Signature public List getTemplateTasks() Returns List ActionPlan Template Tasks getTemplateTaskSize() Return size of the APTTemplate Tasks List. Signature public Integer getTemplateTaskSize() Returns Integer the number of template tasks getTemplateWrappers() Iterate over aptTasks and generate wrappers for display on the page Signature public List getTemplateWrappers() Returns List All the template wrappers for display on the page See ActionPlanTemplateCreationController.aptTasks onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null See ActionPlansUtilities.onPageLoad queryAPTTasks(templateId) Single query for ActionPlan Template Tasks Signature private List queryAPTTasks(Id templateId) Parameters templateId Type: Id APTemplate__c Id Returns List The related APTemplate Tasks Author David Schach removeTemplateTask() Remove this row from the Template Tasks(but do not commit to the database) Signature public void removeTemplateTask() saveAndNew() Save and go to New page for Save and New Signature public Pagereference saveAndNew() Returns PageReference Page.ActionPlanTemplateCreation saveTemplate() Saves Action Plan Template and all tasks, then redirects to the AP template list. First check for pending templates for delete; in case that exists then delete those objects. Then insert or update the Action Plan Template pending to save and save tasks to the template and attach relation to Action Plan. Signature public PageReference saveTemplate() Returns PageReference Page.ActionPlanTemplateDetail templateCycleDependent() Checks if Action Plans Tasks has cyclic dependency. Signature public Boolean templateCycleDependent() Returns Boolean cyclicErrorExists ActionPlanTemplateCreationController.ApTTaskWrapper Inner Wrapper Class for Action Plan Template Tasks Signature public class ApTTaskWrapper Matias Menafra @date 08/08/2010 David Schach @date 05/2021 ActionPlanTemplateCreationController.ApTTaskWrapper Properties Name Signature Description isLast public Boolean isLast Last Task position public Integer position Task position(order on the page) task public APTemplateTask__c task Action Plan Template Task in wrapper ActionPlanTemplateCreationController.ApTTaskWrapper Constructors ApTTaskWrapper(apTask, pos, apTTaskRTId) Constructor for ActionPlan Template Task Wrapper ApTTaskWrapper(apTask, pos, apTTaskRTId) Constructor for ActionPlan Template Task Wrapper Signature public ApTTaskWrapper(APTemplateTask__c apTask, Integer pos, Id apTTaskRTId) Parameters apTask Type: APTemplateTask__c Action Plan Template Task pos Type: Integer Position/Index apTTaskRTId Type: Id The RecordType of the related Task See ActionPlansUtilities"
+ "text": "ActionPlanTemplateCreationController Extension for Action Plan Template Create/Edit page Signature public with sharing class ActionPlanTemplateCreationController Since v3 Authors Rodrigo Birriel , David Schach ActionPlanTemplateCreationController Properties Name Signature Annotations Description actionPlanTemplate private ActionPlanTemplate__c actionPlanTemplate @testVisible The Action Plan Template for this page aptTasks private List aptTasks @TestVisible The list of Template Tasks(no wrapper) - private for internal use only canDisplayReminder public Boolean canDisplayReminder Does the user have reminders enabled? errorMsg private String errorMsg Store the value of the error message pendingTemplateTaskDeletes private List pendingTemplateTaskDeletes @testVisible subTitle public String subTitle Page SubTitle taskHasRecordType public Boolean taskHasRecordType Does the Task object have Record Types enabled? taskIndex private Double taskIndex taskPriorities private List taskPriorities Generate picklist of Task Priority taskTypes private List taskTypes Generate picklist of Task Type templateId private Id templateId If we are making this template from another template, the Id is stored here ActionPlanTemplateCreationController Constructors ActionPlanTemplateCreationController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. Then we need to check if we are cloning the template; in that case clone the template without Id. ActionPlanTemplateCreationController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. Then we need to check if we are cloning the template; in that case clone the template without Id. Signature public ActionPlanTemplateCreationController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController Standard Controller(ActionPlanTemplate__c ) ActionPlanTemplateCreationController Methods addTemplateTask() Add a new row to the Template Tasks(but do not commit to the database) calculateTaskIndexValue() Calculates the highest task index value cancelTemplate() Cancel changes checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. dependantCycle(inspectedTask, index) Check for dependent tasks doSave() Standalone save action so the redirects are different for Save vs Save and New First delete pending deletions, then upsert the template and its tasks, then update dependencies getDefaultTaskRecordTypeId() Find user default recordtype getErrorMsg() Getter method to return the error message from action plans utilities getHoursOption() Get the reminder time picklist options from the central utilities class getTaskPriorities() Generate picklist of Task Priorities getTaskRTPicklistValues() Generate picklist of Task Record Types getTaskTypes() Generate a picklist of Task Type getTemplateSubjectItems() Call method getTemplateSubjectItems() getTemplateTasks() Get all tasks related to the Action Template. getTemplateTaskSize() Return size of the APTTemplate Tasks List. getTemplateWrappers() Iterate over aptTasks and generate wrappers for display on the page onLoad() Action on page load to ensure custom setting is created queryAPTTasks(templateId) Single query for ActionPlan Template Tasks removeTemplateTask() Remove this row from the Template Tasks(but do not commit to the database) saveAndNew() Save and go to New page for Save and New saveTemplate() Saves Action Plan Template and all tasks, then redirects to the AP template list. First check for pending templates for delete; in case that exists then delete those objects. Then insert or update the Action Plan Template pending to save and save tasks to the template and attach relation to Action Plan. templateCycleDependent() Checks if Action Plans Tasks has cyclic dependency. addTemplateTask() Add a new row to the Template Tasks(but do not commit to the database) Signature public void addTemplateTask() calculateTaskIndexValue() Calculates the highest task index value Signature public Double calculateTaskIndexValue() Returns Double maxIndex cancelTemplate() Cancel changes Signature public PageReference cancelTemplate() Returns PageReference Object home or Template detail page checkCycleDependent() Checks if Action Plan Tasks has cyclic dependency. Signature public PageReference checkCycleDependent() Returns PageReference to allow pass-through of save action dependantCycle(inspectedTask, index) Check for dependent tasks Signature private Boolean dependantCycle(APTemplateTask__c inspectedTask, Integer index) Parameters inspectedTask Type: APTemplateTask__c We check against a specific task index Type: Integer The index(position) of the template task Returns Boolean Is there a dependency for this task? doSave() Standalone save action so the redirects are different for Save vs Save and New First delete pending deletions, then upsert the template and its tasks, then update dependencies Signature private Boolean doSave() Returns Boolean Do we have an error? getDefaultTaskRecordTypeId() Find user default recordtype Signature public Id getDefaultTaskRecordTypeId() Returns Id The org default Task RecordTypeId See ActionPlansUtilities.getDefaultTaskRecordTypeId getErrorMsg() Getter method to return the error message from action plans utilities Signature public String getErrorMsg() Returns String errorMsg See ActionPlanTemplateCreationController.errorMsg getHoursOption() Get the reminder time picklist options from the central utilities class Signature public List getHoursOption() Returns List Picklist of reminder times See ActionPlansUtilities.getHoursOption getTaskPriorities() Generate picklist of Task Priorities Signature public List getTaskPriorities() Returns List Picklist of Task.Priority See ActionPlansUtilities.getFieldOptions Author David Schach getTaskRTPicklistValues() Generate picklist of Task Record Types Signature public List getTaskRTPicklistValues() Returns List A picklist of available Record Types See ActionPlansUtilities.getTaskRTPicklistValues getTaskTypes() Generate a picklist of Task Type Signature public List getTaskTypes() Returns List Picklist of Task.Type See ActionPlansUtilities.getFieldOptions Author David Schach getTemplateSubjectItems() Call method getTemplateSubjectItems() Signature public List getTemplateSubjectItems() Returns List the picklist of Task subjects getTemplateTasks() Get all tasks related to the Action Template. Signature public List getTemplateTasks() Returns List ActionPlan Template Tasks getTemplateTaskSize() Return size of the APTTemplate Tasks List. Signature public Integer getTemplateTaskSize() Returns Integer the number of template tasks getTemplateWrappers() Iterate over aptTasks and generate wrappers for display on the page Signature public List getTemplateWrappers() Returns List All the template wrappers for display on the page See ActionPlanTemplateCreationController.aptTasks onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null See ActionPlansUtilities.onPageLoad queryAPTTasks(templateId) Single query for ActionPlan Template Tasks Signature private List queryAPTTasks(Id templateId) Parameters templateId Type: Id APTemplate__c Id Returns List The related APTemplate Tasks Author David Schach removeTemplateTask() Remove this row from the Template Tasks(but do not commit to the database) Signature public void removeTemplateTask() saveAndNew() Save and go to New page for Save and New Signature public Pagereference saveAndNew() Returns PageReference Page.ActionPlanTemplateCreation saveTemplate() Saves Action Plan Template and all tasks, then redirects to the AP template list. First check for pending templates for delete; in case that exists then delete those objects. Then insert or update the Action Plan Template pending to save and save tasks to the template and attach relation to Action Plan. Signature public PageReference saveTemplate() Returns PageReference Page.ActionPlanTemplateDetail templateCycleDependent() Checks if Action Plans Tasks has cyclic dependency. Signature public Boolean templateCycleDependent() Returns Boolean cyclicErrorExists ActionPlanTemplateCreationController.ApTTaskWrapper Inner Wrapper Class for Action Plan Template Tasks Signature public class ApTTaskWrapper Authors Matias Menafra @date 08/08/2010, David Schach @date 05/2021 ActionPlanTemplateCreationController.ApTTaskWrapper Properties Name Signature Description isLast public Boolean isLast Last Task position public Integer position Task position(order on the page) task public APTemplateTask__c task Action Plan Template Task in wrapper ActionPlanTemplateCreationController.ApTTaskWrapper Constructors ApTTaskWrapper(apTask, pos, apTTaskRTId) Constructor for ActionPlan Template Task Wrapper ApTTaskWrapper(apTask, pos, apTTaskRTId) Constructor for ActionPlan Template Task Wrapper Signature public ApTTaskWrapper(APTemplateTask__c apTask, Integer pos, Id apTTaskRTId) Parameters apTask Type: APTemplateTask__c Action Plan Template Task pos Type: Integer Position/Index apTTaskRTId Type: Id The RecordType of the related Task See ActionPlansUtilities"
},
{
"title": "ActionPlanTemplateDetailController",
"fileName": "ActionPlanTemplateDetailController.html",
- "text": "ActionPlanTemplateDetailController Signature public with sharing class ActionPlanTemplateDetailController David Schach 2022 ActionPlanTemplateDetailController Properties Name Signature Annotations Description actionPlanExportXMLId public Id actionPlanExportXMLId The Id of the Action Plan for Exporting. Shown on the Export page that shares thsi controller actionPlanTemplate private ActionPlanTemplate__c actionPlanTemplate @TestVisible canDisplayReminder public Boolean canDisplayReminder Does the user have reminders enabled? taskHasRecordType public Boolean taskHasRecordType Does the org use Task RecordType? ActionPlanTemplateDetailController Constructors ActionPlanTemplateDetailController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. ActionPlanTemplateDetailController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. Signature public ActionPlanTemplateDetailController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController Standard Controller(Action Plan Template) See ActionPlansUtilities.getCanDisplayReminder ActionPlanTemplateDetailController Methods deleteTemplate() Delete the template exportTemplateToXMLDoc() Method exports the Action Plan template into a new XML document getCanShare() If we have no share object, we don't need to show a Share button Also validate user permission to share getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. getRecordTypeName() Convert Record Type Id to Record Type Name getSuccessMessage() Determine the export success message based on LEX vs Classic getTemplateTasks() Query Template Tasks onLoad() Action on page load to ensure custom setting is created deleteTemplate() Delete the template Signature public PageReference deleteTemplate() Returns PageReference Action Plan Template home tab exportTemplateToXMLDoc() Method exports the Action Plan template into a new XML document Signature public void exportTemplateToXMLDoc() See ActionPlanTemplateExport getCanShare() If we have no share object, we don't need to show a Share button Also validate user permission to share Signature public Boolean getCanShare() Returns Boolean Does the user have permission to share this Action Plan Template? See ActionPlansUtilities.canShareRecord Author David Schach getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. Signature public Boolean getCanTransfer() Returns Boolean Does the user have permission to transfer this Action Plan Template? See ActionPlansUtilities.getCanTransfer Author David Schach getRecordTypeName() Convert Record Type Id to Record Type Name Signature public String getRecordTypeName() Returns String Record Type Name getSuccessMessage() Determine the export success message based on LEX vs Classic Signature public String getSuccessMessage() Returns String The success message See ActionPlansUtilities.getIsLex getTemplateTasks() Query Template Tasks Signature public List getTemplateTasks() Returns List The Template Tasks onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null(required for page actions method) See ActionPlansUtilities.onPageLoad"
+ "text": "ActionPlanTemplateDetailController Signature public with sharing class ActionPlanTemplateDetailController Author David Schach Since 2022 ActionPlanTemplateDetailController Properties Name Signature Annotations Description actionPlanExportXMLId public Id actionPlanExportXMLId The Id of the Action Plan for Exporting. Shown on the Export page that shares this controller actionPlanTemplate private ActionPlanTemplate__c actionPlanTemplate @TestVisible canDisplayReminder public Boolean canDisplayReminder Does the user have reminders enabled? taskHasRecordType public Boolean taskHasRecordType Does the org use Task RecordType? ActionPlanTemplateDetailController Constructors ActionPlanTemplateDetailController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. ActionPlanTemplateDetailController(stdController) Constructor If we can obtain the Id from the page parameters then we search for that template and set the variable for that template. If we can't obtain the Id from the page parameters then we create a new template and obtain from the controller. Signature public ActionPlanTemplateDetailController(ApexPages.StandardController stdController) Parameters stdController Type: ApexPages.StandardController Standard Controller(Action Plan Template) See ActionPlansUtilities.getCanDisplayReminder ActionPlanTemplateDetailController Methods deleteTemplate() Delete the template exportTemplateToXMLDoc() Method exports the Action Plan template into a new XML document getCanShare() If we have no share object, we don't need to show a Share button Also validate user permission to share getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. getRecordTypeName() Convert Record Type Id to Record Type Name getSuccessMessage() Determine the export success message based on LEX vs Classic getTemplateTasks() Query Template Tasks onLoad() Action on page load to ensure custom setting is created deleteTemplate() Delete the template Signature public PageReference deleteTemplate() Returns PageReference Action Plan Template home tab exportTemplateToXMLDoc() Method exports the Action Plan template into a new XML document Signature public void exportTemplateToXMLDoc() See ActionPlanTemplateExport getCanShare() If we have no share object, we don't need to show a Share button Also validate user permission to share Signature public Boolean getCanShare() Returns Boolean Does the user have permission to share this Action Plan Template? See ActionPlansUtilities.canShareRecord Author David Schach getCanTransfer() Does the user have permission to transfer? We query UserRecordAccess to find out. Signature public Boolean getCanTransfer() Returns Boolean Does the user have permission to transfer this Action Plan Template? See ActionPlansUtilities.getCanTransfer Author David Schach getRecordTypeName() Convert Record Type Id to Record Type Name Signature public String getRecordTypeName() Returns String Record Type Name getSuccessMessage() Determine the export success message based on LEX vs Classic Signature public String getSuccessMessage() Returns String The success message See ActionPlansUtilities.getIsLex getTemplateTasks() Query Template Tasks Signature public List getTemplateTasks() Returns List The Template Tasks onLoad() Action on page load to ensure custom setting is created Signature public PageReference onLoad() Returns PageReference null(required for page actions method) See ActionPlansUtilities.onPageLoad"
},
{
"title": "ActionPlanTemplateExport",
"fileName": "ActionPlanTemplateExport.html",
- "text": "ActionPlanTemplateExport Helper class to do the work for creating XML for a given Action Plan Template Signature public without sharing class ActionPlanTemplateExport See ActionPlanTemplateDetailController.exportTemplateToXMLDoc 2011 ActionPlanTemplateExport Properties Name Signature Description fileOrDocumentId public Id fileOrDocumentId The File or Document Id for display on the Visualforce confirmation page templateId private String templateId The ActionPlanTemplate__c to be exported ActionPlanTemplateExport Constructors ActionPlanTemplateExport(templateId) Constructor ActionPlanTemplateExport(templateId) Constructor Signature public ActionPlanTemplateExport(String templateId) Parameters templateId Type: String ActionPlanTemplate__c Id ActionPlanTemplateExport Methods buildXmlString(target) Method to compile XML document for a given Action Plan Template and child tasks export() Method in charge of handling the export task related to a Action Plan Template saveToContent(name, xml) Method to save the XML file to a File(if the user is using Lightning Experience) saveToDocument(name, xml) Method to save document in personal folder for later retrievel writeElement(out, tag, content) Method used for sanitizing input for XML document buildXmlString(target) Method to compile XML document for a given Action Plan Template and child tasks Signature @TestVisible private String buildXmlString(ActionPlanTemplate__c target) Parameters target Type: ActionPlanTemplate__c Returns String The XML export() Method in charge of handling the export task related to a Action Plan Template Signature public Id export() Returns ContentDocument or Document Id See ActionPlansUtilities.getIsLex Author David Schach saveToContent(name, xml) Method to save the XML file to a File(if the user is using Lightning Experience) Signature @TestVisible private Id saveToContent(String name, String xml) Parameters name Type: String File Name xml Type: String The XML of the exported template Returns Id of the new ContentDocument Author David Schach saveToDocument(name, xml) Method to save document in personal folder for later retrievel Signature @TestVisible private Id saveToDocument(String name, String xml) Parameters name Type: String xml Type: String Returns Id of the new Document Author David Schach writeElement(out, tag, content) Method used for sanitizing input for XML document Signature private void writeElement(Xmlstreamwriter out, String tag, String content) Parameters out Type: Xmlstreamwriter Xmlstreamwriter the XML string so far tag Type: String String XML Tag content Type: String String XML content"
+ "text": "ActionPlanTemplateExport Helper class to do the work for creating XML for a given Action Plan Template Signature public without sharing class ActionPlanTemplateExport See ActionPlanTemplateDetailController.exportTemplateToXMLDoc Since 2011 ActionPlanTemplateExport Properties Name Signature Description fileOrDocumentId public Id fileOrDocumentId The File or Document Id for display on the Visualforce confirmation page templateId private String templateId The ActionPlanTemplate__c to be exported ActionPlanTemplateExport Constructors ActionPlanTemplateExport(templateId) Constructor ActionPlanTemplateExport(templateId) Constructor Signature public ActionPlanTemplateExport(String templateId) Parameters templateId Type: String ActionPlanTemplate__c Id ActionPlanTemplateExport Methods buildXmlString(target) Method to compile XML document for a given Action Plan Template and child tasks export() Method in charge of handling the export task related to a Action Plan Template saveToContent(name, xml) Method to save the XML file to a File(if the user is using Lightning Experience) saveToDocument(name, xml) Method to save document in personal folder for later retrievel writeElement(out, tag, content) Method used for sanitizing input for XML document buildXmlString(target) Method to compile XML document for a given Action Plan Template and child tasks Signature @TestVisible private String buildXmlString(ActionPlanTemplate__c target) Parameters target Type: ActionPlanTemplate__c Returns String The XML export() Method in charge of handling the export task related to a Action Plan Template Signature public Id export() Returns ContentDocument or Document Id See ActionPlansUtilities.getIsLex Author David Schach saveToContent(name, xml) Method to save the XML file to a File(if the user is using Lightning Experience) Signature @TestVisible private Id saveToContent(String name, String xml) Parameters name Type: String File Name xml Type: String The XML of the exported template Returns Id of the new ContentDocument Author David Schach saveToDocument(name, xml) Method to save document in personal folder for later retrievel Signature @TestVisible private Id saveToDocument(String name, String xml) Parameters name Type: String xml Type: String Returns Id of the new Document Author David Schach writeElement(out, tag, content) Method used for sanitizing input for XML document Signature private void writeElement(Xmlstreamwriter out, String tag, String content) Parameters out Type: Xmlstreamwriter Xmlstreamwriter the XML string so far tag Type: String String XML Tag content Type: String String XML content"
},
{
"title": "ActionPlanTemplateImport",
"fileName": "ActionPlanTemplateImport.html",
- "text": "ActionPlanTemplateImport Called from ActionPlanTemplateImportController - can probably be rolled into that class, but it's doing fine here. Signature public inherited sharing class ActionPlanTemplateImport See ActionPlanTemplateImportController David Schach 2022 ActionPlanTemplateImport Properties Name Signature importedTasks private Map importedTasks newTasks private Map newTasks ActionPlanTemplateImport Constructors ActionPlanTemplateImport() Controller Constructor ActionPlanTemplateImport() Controller Constructor Signature public ActionPlanTemplateImport() ActionPlanTemplateImport Methods getDecodedString(reader) Method for decoding strings from XML document importAPTemplate(xml) Handle importing of a Action Plan Template Object importAPTtasks(xml, apTemplateId) Handle importing of Action Plan Template Task Objects parseMetaData(reader) Parse metadata from XMl document parseTemplate(reader) Parse data from XMl document to create a Action Plan Template Object parseTemplateTask(reader, apTemplateId) Parse data from XMl document to create a Template Task Object processImportedDocument(document) Method in charge of retrieving and compiling the data from imported file, for then inserting into the system. readingMetaData(xml) Method for reading the meta data tag from xml document setupDependentTasks() Method in charge of re-building dependent tasks for imported Action Plans Template getDecodedString(reader) Method for decoding strings from XML document Signature private String getDecodedString(Xmlstreamreader reader) Parameters reader Type: Xmlstreamreader Part of the XML string Returns String importAPTemplate(xml) Handle importing of a Action Plan Template Object Signature private ActionPlanTemplate__c importAPTemplate(String xml) Parameters xml Type: String import file Returns ActionPlanTemplate__c Action Plan Template importAPTtasks(xml, apTemplateId) Handle importing of Action Plan Template Task Objects Signature private void importAPTtasks(String xml, Id apTemplateId) Parameters xml Type: String import file apTemplateId Type: Id Action Plan Template Id parseMetaData(reader) Parse metadata from XMl document Signature private Boolean parseMetaData(Xmlstreamreader reader) Parameters reader Type: Xmlstreamreader Returns Boolean correctMetaData Exceptions ImportException parseTemplate(reader) Parse data from XMl document to create a Action Plan Template Object Signature private ActionPlanTemplate__c parseTemplate(Xmlstreamreader reader) Parameters reader Type: Xmlstreamreader Returns ActionPlanTemplate__c The created Action Plan Template parseTemplateTask(reader, apTemplateId) Parse data from XMl document to create a Template Task Object Signature private void parseTemplateTask(Xmlstreamreader reader, Id apTemplateId) Parameters reader Type: Xmlstreamreader XML reader apTemplateId Type: Id template Id processImportedDocument(document) Method in charge of retrieving and compiling the data from imported file, for then inserting into the system. Signature public String processImportedDocument(Attachment document) Parameters document Type: Attachment Attachment record Returns String Action Plan Template Id Exceptions ImportException readingMetaData(xml) Method for reading the meta data tag from xml document Signature private void readingMetaData(String xml) Parameters xml Type: String String of import file Exceptions ImportException setupDependentTasks() Method in charge of re-building dependent tasks for imported Action Plans Template Signature private List setupDependentTasks() Returns List updatedTasks ActionPlanTemplateImport.ImportException Signature public class ImportException extends Exception"
+ "text": "ActionPlanTemplateImport Called from ActionPlanTemplateImportController - can probably be rolled into that class, but it's doing fine here. Signature public inherited sharing class ActionPlanTemplateImport See ActionPlanTemplateImportController Since 2022 Author David Schach ActionPlanTemplateImport Properties Name Signature importedTasks private Map importedTasks newTasks private Map newTasks ActionPlanTemplateImport Constructors ActionPlanTemplateImport() Controller Constructor ActionPlanTemplateImport() Controller Constructor Signature public ActionPlanTemplateImport() ActionPlanTemplateImport Methods getDecodedString(reader) Method for decoding strings from XML document importAPTemplate(xml) Handle importing of a Action Plan Template Object importAPTtasks(xml, apTemplateId) Handle importing of Action Plan Template Task Objects parseMetaData(reader) Parse metadata from XMl document parseTemplate(reader) Parse data from XMl document to create a Action Plan Template Object parseTemplateTask(reader, apTemplateId) Parse data from XMl document to create a Template Task Object processImportedDocument(document) Method in charge of retrieving and compiling the data from imported file, for then inserting into the system. readingMetaData(xml) Method for reading the meta data tag from xml document setupDependentTasks() Method in charge of re-building dependent tasks for imported Action Plans Template getDecodedString(reader) Method for decoding strings from XML document Signature private String getDecodedString(Xmlstreamreader reader) Parameters reader Type: Xmlstreamreader Part of the XML string Returns String importAPTemplate(xml) Handle importing of a Action Plan Template Object Signature private ActionPlanTemplate__c importAPTemplate(String xml) Parameters xml Type: String import file Returns ActionPlanTemplate__c Action Plan Template importAPTtasks(xml, apTemplateId) Handle importing of Action Plan Template Task Objects Signature private void importAPTtasks(String xml, Id apTemplateId) Parameters xml Type: String import file apTemplateId Type: Id Action Plan Template Id parseMetaData(reader) Parse metadata from XMl document Signature private Boolean parseMetaData(Xmlstreamreader reader) Parameters reader Type: Xmlstreamreader Returns Boolean correctMetaData Exceptions ImportException parseTemplate(reader) Parse data from XMl document to create a Action Plan Template Object Signature private ActionPlanTemplate__c parseTemplate(Xmlstreamreader reader) Parameters reader Type: Xmlstreamreader Returns ActionPlanTemplate__c The created Action Plan Template parseTemplateTask(reader, apTemplateId) Parse data from XMl document to create a Template Task Object Signature private void parseTemplateTask(Xmlstreamreader reader, Id apTemplateId) Parameters reader Type: Xmlstreamreader XML reader apTemplateId Type: Id template Id processImportedDocument(document) Method in charge of retrieving and compiling the data from imported file, for then inserting into the system. Signature public String processImportedDocument(Attachment document) Parameters document Type: Attachment Attachment record Returns String Action Plan Template Id Exceptions ImportException readingMetaData(xml) Method for reading the meta data tag from xml document Signature private void readingMetaData(String xml) Parameters xml Type: String String of import file Exceptions ImportException setupDependentTasks() Method in charge of re-building dependent tasks for imported Action Plans Template Signature private List setupDependentTasks() Returns List updatedTasks ActionPlanTemplateImport.ImportException Signature public class ImportException extends Exception"
},
{
"title": "ActionPlanTemplateImportController",
"fileName": "ActionPlanTemplateImportController.html",
- "text": "ActionPlanTemplateImportController Controller for import page Signature public with sharing class ActionPlanTemplateImportController See ActionPlanTemplateImport David Schach 2022 ActionPlanTemplateImportController Properties Name Signature Description attachment public Attachment attachment The attachment to be used to hold imported xml ActionPlanTemplateImportController Constructors ActionPlanTemplateImportController() Controller Constructor initializes the attachment we will temporarily use to hold the imported XML ActionPlanTemplateImportController() Controller Constructor initializes the attachment we will temporarily use to hold the imported XML Signature public ActionPlanTemplateImportController() ActionPlanTemplateImportController Methods importTemplate() Action that initiates the Import process importTemplate() Action that initiates the Import process Signature public PageReference importTemplate() Returns PageReference ActionPlanTemplateDetail See ActionPlanTemplateImport"
+ "text": "ActionPlanTemplateImportController Controller for import page Signature public with sharing class ActionPlanTemplateImportController See ActionPlanTemplateImport Author David Schach Since 2022 ActionPlanTemplateImportController Properties Name Signature Description attachment public Attachment attachment The attachment to be used to hold imported xml ActionPlanTemplateImportController Constructors ActionPlanTemplateImportController() Controller Constructor initializes the attachment we will temporarily use to hold the imported XML ActionPlanTemplateImportController() Controller Constructor initializes the attachment we will temporarily use to hold the imported XML Signature public ActionPlanTemplateImportController() ActionPlanTemplateImportController Methods importTemplate() Action that initiates the Import process importTemplate() Action that initiates the Import process Signature public PageReference importTemplate() Returns PageReference ActionPlanTemplateDetail See ActionPlanTemplateImport"
},
{
"title": "ActionPlansBuilderUtilities",
"fileName": "ActionPlansBuilderUtilities.html",
- "text": "ActionPlansBuilderUtilities Builder Utilities class Signature public inherited sharing class ActionPlansBuilderUtilities See ActionPlanCreateInvocable , ActionPlanCreationController , ActionPlansQueueableBuilder Rodrigo Birriel David Schach v3 ActionPlansBuilderUtilities Properties Name Signature Description baseAPTaskList private List baseAPTaskList mode private ApEditMode mode myNewTasksWithEmail private List myNewTasksWithEmail Tasks to insert that have Send Email checked myOldTasksWithEmail private List myOldTasksWithEmail Tasks to update that have Send Email checked myTasksWithOutEmail private List myTasksWithOutEmail All tasks for upserting that will not require an email to be sent relActionPlans private List relActionPlans relAPTaskList private List relAPTaskList relatedObjectName private String relatedObjectName relatedRecordIDs private Set relatedRecordIDs Enums Name Signature Values Description ApEditMode private enum ApEditMode MODE_EDIT_SINGLE, MODE_NEW Editing or creating an ActionPlan__c record? ActionPlansBuilderUtilities Constructors ActionPlansBuilderUtilities(baseObj, aPTListparam, refType, oIdsLIst) Constructor ActionPlansBuilderUtilities(baseObj, aPTListparam, refType, oIdsLIst) Constructor Signature public ActionPlansBuilderUtilities(ActionPlan__c baseObj, List aPTListparam, String refType, Set oIdsLIst) Parameters baseObj Type: ActionPlan__c ActionPlan object aPTListparam Type: List Action Plan Task Template records refType Type: String Related object Name oIdsLIst Type: Set Parent IDs ActionPlansBuilderUtilities Methods generateActionPlans() Generate Action Plans from parameters passed to this class generateObjectFeeds(recIDs) Generate New FeedItems for multiple Action Plans getAPTaskTemplateUser(ap, relObjOwners, apTaskUser) Read the Action Plan and see the custom setting to determine who should own the AP Tasks getPostObjectBody(recID, apName) Given a parentID and the name of an Action Plan, make the FeedItem post body getRelatedRecordOwnerId(ap, relObjOwners) Given an Action Plan, looking in its relationship fields, find the owner of the related record from the map of records and owners retrieveOwnersDataRelatedObject(relatedRecordIDs) Retrieve the owner list from the related object. Exclude owners that are not users(that are queues) generateActionPlans() Generate Action Plans from parameters passed to this class Signature public Id generateActionPlans() Returns Id of the first created ActionPlan__c Author David Schach generateObjectFeeds(recIDs) Generate New FeedItems for multiple Action Plans Signature public static void generateObjectFeeds(Set recIDs) Parameters recIDs Type: Set Set of IDs of records for which we may make Chatter posts See ActionPlansUtilities.getRelatedSObjectDescribe , ActionPlansUtilities.getPostObjectBody getAPTaskTemplateUser(ap, relObjOwners, apTaskUser) Read the Action Plan and see the custom setting to determine who should own the AP Tasks Signature public static Id getAPTaskTemplateUser(ActionPlan__c ap, Map relObjOwners, Id apTaskUser) Parameters ap Type: ActionPlan__c The ActionPlan__c relObjOwners Type: Map Map of Id to record OwnerId apTaskUser Type: Id The record user Id Returns Id The APTask__c assigned user See ActionPlansBuilderUtilities.getRelatedRecordOwnerId getPostObjectBody(recID, apName) Given a parentID and the name of an Action Plan, make the FeedItem post body Signature public static String getPostObjectBody(Id recID, String apName) Parameters recID Type: Id Parent ID apName Type: String Action Plan Name Returns String The FeedItem Body Author David Schach getRelatedRecordOwnerId(ap, relObjOwners) Given an Action Plan, looking in its relationship fields, find the owner of the related record from the map of records and owners Signature public static Id getRelatedRecordOwnerId(ActionPlan__c ap, Map relObjOwners) Parameters ap Type: ActionPlan__c ActionPlan__c relObjOwners Type: Map Map of related object Id to OwnerId Returns Id The related record OwnerId retrieveOwnersDataRelatedObject(relatedRecordIDs) Retrieve the owner list from the related object. Exclude owners that are not users(that are queues) Signature public static Map retrieveOwnersDataRelatedObject(Set relatedRecordIDs) Parameters relatedRecordIDs Type: Set List of sobject record Ids Returns Map Map of record Id to Owner Id"
+ "text": "ActionPlansBuilderUtilities Builder Utilities class Signature public inherited sharing class ActionPlansBuilderUtilities See ActionPlanCreateInvocable , ActionPlanCreationController , ActionPlansQueueableBuilder Authors Rodrigo Birriel , David Schach Since v3 ActionPlansBuilderUtilities Properties Name Signature Description allTasksToUpsert private List allTasksToUpsert A single list of all Tasks - we set the DMLOption to send an email notification when we add the Task to this list baseAPTaskList private List baseAPTaskList Local store of aPTListparam passed to constructor mode private ApEditMode mode Store the enum value relActionPlans private List relActionPlans The constructed ActionPlan__c records relatedObjectName private String relatedObjectName Local store of refType passed to constructor relatedRecordIDs private Set relatedRecordIDs Local store of oIdsSet passed to constructor Enums Name Signature Values Description ApEditMode private enum ApEditMode MODE_EDIT_SINGLE, MODE_NEW Editing or creating an ActionPlan__c record? ActionPlansBuilderUtilities Constructors ActionPlansBuilderUtilities(baseObj, aPTListparam, refType, oIdsSet) Constructor ActionPlansBuilderUtilities(baseObj, aPTListparam, refType, oIdsSet) Constructor Signature public ActionPlansBuilderUtilities(ActionPlan__c baseObj, List aPTListparam, String refType, Set oIdsSet) Parameters baseObj Type: ActionPlan__c ActionPlan object aPTListparam Type: List Action Plan Task Template records refType Type: String Related object Name oIdsSet Type: Set Parent IDs ActionPlansBuilderUtilities Methods generateActionPlans() Generate Action Plans from parameters passed to this class generateObjectFeeds(recIDs) Generate New FeedItems for multiple Action Plans getAPTaskTemplateUser(ap, relObjOwners, apTaskUser) Read the Action Plan and see the custom setting to determine who should own the AP Tasks getPostObjectBody(recID, apName) Given a parentID and the name of an Action Plan, make the FeedItem post body getRelatedRecordOwnerId(ap, relObjOwners) Given an Action Plan, looking in its relationship fields, find the owner of the related record from the map of records and owners retrieveOwnersDataRelatedObject(relatedRecordIDs) Retrieve the owner list from the related object. Exclude owners that are not users(that are queues) generateActionPlans() Generate Action Plans from parameters passed to this class Signature public Id generateActionPlans() Returns Id of the first created ActionPlan__c Author David Schach generateObjectFeeds(recIDs) Generate New FeedItems for multiple Action Plans Signature public static void generateObjectFeeds(Set recIDs) Parameters recIDs Type: Set Set of IDs of records for which we may make Chatter posts See ActionPlansUtilities.getRelatedSObjectDescribe , ActionPlansUtilities.getPostObjectBody getAPTaskTemplateUser(ap, relObjOwners, apTaskUser) Read the Action Plan and see the custom setting to determine who should own the AP Tasks Signature public static Id getAPTaskTemplateUser(ActionPlan__c ap, Map relObjOwners, Id apTaskUser) Parameters ap Type: ActionPlan__c The ActionPlan__c relObjOwners Type: Map Map of Id to record OwnerId apTaskUser Type: Id The record user Id Returns Id The APTask__c assigned user See ActionPlansBuilderUtilities.getRelatedRecordOwnerId getPostObjectBody(recID, apName) Given a parentID and the name of an Action Plan, make the FeedItem post body Signature public static String getPostObjectBody(Id recID, String apName) Parameters recID Type: Id Parent ID apName Type: String Action Plan Name Returns String The FeedItem Body Author David Schach getRelatedRecordOwnerId(ap, relObjOwners) Given an Action Plan, looking in its relationship fields, find the owner of the related record from the map of records and owners Signature public static Id getRelatedRecordOwnerId(ActionPlan__c ap, Map relObjOwners) Parameters ap Type: ActionPlan__c ActionPlan__c relObjOwners Type: Map Map of related object Id to OwnerId Returns Id The related record OwnerId retrieveOwnersDataRelatedObject(relatedRecordIDs) Retrieve the owner list from the related object. Exclude owners that are not users(that are queues) Signature public static Map retrieveOwnersDataRelatedObject(Set relatedRecordIDs) Parameters relatedRecordIDs Type: Set List of sobject record Ids Returns Map Map of record Id to Owner Id"
},
{
"title": "ActionPlansCreateMultipleAPsExtension",
"fileName": "ActionPlansCreateMultipleAPsExtension.html",
- "text": "ActionPlansCreateMultipleAPsExtension Visualforce extension to create multiple Action Plans(one per selected record) Invoked via a button on a list view Signature global with sharing class ActionPlansCreateMultipleAPsExtension David Schach 2022 ActionPlansCreateMultipleAPsExtension Properties Name Signature Description objIDs global String objIDs All the selected records from the list view stdSetCntrlr private ApexPages.StandardSetController stdSetCntrlr The standard set controller. Not much use besides allowing the page to show on a list view and letting us cancel the action with a system-generated redirect ActionPlansCreateMultipleAPsExtension Constructors ActionPlansCreateMultipleAPsExtension(stdSetController) Constructor ActionPlansCreateMultipleAPsExtension(stdSetController) Constructor Signature global ActionPlansCreateMultipleAPsExtension(ApexPages.StandardSetController stdSetController) Parameters stdSetController Type: ApexPages.StandardSetController Standard Set Controller - used only for Cancel standard action Author David Schach ActionPlansCreateMultipleAPsExtension Methods doRedirect() Go to the page that shows the ActionPlan creation screen to customize the plan for each selected record doRedirect() Go to the page that shows the ActionPlan creation screen to customize the plan for each selected record Signature global PageReference doRedirect() Returns PageReference The Action Plan creation page Author David Schach"
+ "text": "ActionPlansCreateMultipleAPsExtension Visualforce extension to create multiple Action Plans(one per selected record) Invoked via a button on a list view Signature global with sharing class ActionPlansCreateMultipleAPsExtension Author David Schach Since 2022 ActionPlansCreateMultipleAPsExtension Properties Name Signature Description objIDs global String objIDs All the selected records from the list view stdSetCntrlr private ApexPages.StandardSetController stdSetCntrlr The standard set controller. Not much use besides allowing the page to show on a list view and letting us cancel the action with a system-generated redirect ActionPlansCreateMultipleAPsExtension Constructors ActionPlansCreateMultipleAPsExtension(stdSetController) Constructor ActionPlansCreateMultipleAPsExtension(stdSetController) Constructor Signature global ActionPlansCreateMultipleAPsExtension(ApexPages.StandardSetController stdSetController) Parameters stdSetController Type: ApexPages.StandardSetController Standard Set Controller - used only for Cancel standard action Author David Schach ActionPlansCreateMultipleAPsExtension Methods doRedirect() Go to the page that shows the ActionPlan creation screen to customize the plan for each selected record doRedirect() Go to the page that shows the ActionPlan creation screen to customize the plan for each selected record Signature global PageReference doRedirect() Returns PageReference The Action Plan creation page Author David Schach"
},
{
"title": "ActionPlansDeleteMultipleAPExtension",
"fileName": "ActionPlansDeleteMultipleAPExtension.html",
- "text": "ActionPlansDeleteMultipleAPExtension Controller for page to mass-delete using a set controller. Validates using CanTheUser to ensure user permissions Signature public with sharing class ActionPlansDeleteMultipleAPExtension See {@link [Salesforce StackExchange](https://salesforce.stackexchange.com/a/4141/59)} , CanTheUser Andrew Fawcett David Schach 2022 ActionPlansDeleteMultipleAPExtension Properties Name Signature Description actionPlansToShow public List actionPlansToShow The Action Plan records to delete(after user confirmation) standardController private ApexPages.StandardSetController standardController ActionPlansDeleteMultipleAPExtension Constructors ActionPlansDeleteMultipleAPExtension(stdSetController) Extension Constructor for page showing Action Plans we want to delete ActionPlansDeleteMultipleAPExtension(stdSetController) Extension Constructor for page showing Action Plans we want to delete Signature public ActionPlansDeleteMultipleAPExtension(ApexPages.StandardSetController stdSetController) Parameters stdSetController Type: ApexPages.StandardSetController ActionPlan__c standard controller Author David Schach ActionPlansDeleteMultipleAPExtension Methods deleteRecords() Page Redirect on delete deleteRecords() Page Redirect on delete Signature public PageReference deleteRecords() Returns PageReference with success/error message Author David Schach"
+ "text": "ActionPlansDeleteMultipleAPExtension Controller for page to mass-delete using a set controller. Validates using CanTheUser to ensure user permissions Signature public with sharing class ActionPlansDeleteMultipleAPExtension See {@link [Salesforce StackExchange](https://salesforce.stackexchange.com/a/4141/59)} , CanTheUser Authors Andrew Fawcett , David Schach Since 2022 ActionPlansDeleteMultipleAPExtension Properties Name Signature Description actionPlansToShow public List actionPlansToShow The Action Plan records to delete(after user confirmation) standardController private ApexPages.StandardSetController standardController ActionPlansDeleteMultipleAPExtension Constructors ActionPlansDeleteMultipleAPExtension(stdSetController) Extension Constructor for page showing Action Plans we want to delete ActionPlansDeleteMultipleAPExtension(stdSetController) Extension Constructor for page showing Action Plans we want to delete Signature public ActionPlansDeleteMultipleAPExtension(ApexPages.StandardSetController stdSetController) Parameters stdSetController Type: ApexPages.StandardSetController ActionPlan__c standard controller Author David Schach ActionPlansDeleteMultipleAPExtension Methods deleteRecords() Page Redirect on delete deleteRecords() Page Redirect on delete Signature public PageReference deleteRecords() Returns PageReference with success/error message Author David Schach"
},
{
"title": "ActionPlansPostInstallScript",
"fileName": "ActionPlansPostInstallScript.html",
- "text": "ActionPlansPostInstallScript Install sample data on first installation Signature global class ActionPlansPostInstallScript implements InstallHandler David Schach 2022 ActionPlansPostInstallScript Methods onFirstInstall() Automated actions on first install of package Create custom settings - in future, use configuration page? Create sample Action Plan Template onInstall(context) Script to run when the managed package is installed or upgraded onPush() Reserved for future use onUpgrade() Reserved for future use onFirstInstall() Automated actions on first install of package Create custom settings - in future, use configuration page? Create sample Action Plan Template Signature private void onFirstInstall() Author David Schach onInstall(context) Script to run when the managed package is installed or upgraded Signature global void onInstall(InstallContext context) Parameters context Type: InstallContext Is this a new install, an upgrade, or a push(from the developer)? Author David Schach onPush() Reserved for future use Signature private void onPush() Author David Schach onUpgrade() Reserved for future use Signature private void onUpgrade() Author David Schach"
+ "text": "ActionPlansPostInstallScript Install sample data on first installation Signature global class ActionPlansPostInstallScript implements InstallHandler Since 2022 Author David Schach ActionPlansPostInstallScript Methods onFirstInstall() Automated actions on first install of package Create custom settings - in future, use configuration page? Create sample Action Plan Template onInstall(context) Script to run when the managed package is installed or upgraded onPush() Reserved for future use onUpgrade() Reserved for future use onFirstInstall() Automated actions on first install of package Create custom settings - in future, use configuration page? Create sample Action Plan Template Signature private void onFirstInstall() Author David Schach onInstall(context) Script to run when the managed package is installed or upgraded Signature global void onInstall(InstallContext context) Parameters context Type: InstallContext Is this a new install, an upgrade, or a push(from the developer)? Author David Schach onPush() Reserved for future use Signature private void onPush() Author David Schach onUpgrade() Reserved for future use Signature private void onUpgrade() Author David Schach"
},
{
"title": "ActionPlansQueueableBuilder",
"fileName": "ActionPlansQueueableBuilder.html",
- "text": "ActionPlansQueueableBuilder Queueable Apex for creating Action Plans Signature public inherited sharing class ActionPlansQueueableBuilder implements Queueable See ActionPlansBuilderUtilities David Schach 2022 ActionPlansQueueableBuilder Properties Name Signature builtUtil private ActionPlansBuilderUtilities builtUtil ActionPlansQueueableBuilder Constructors ActionPlansQueueableBuilder(baseObj, aPTList, refType, oIdsSet) Constructor ActionPlansQueueableBuilder(baseObj, aPTList, refType, oIdsSet) Constructor Signature public ActionPlansQueueableBuilder(ActionPlan__c baseObj, List aPTList, String refType, Set oIdsSet) Parameters baseObj Type: ActionPlan__c ActionPlan base aPTList Type: List List of the task templates refType Type: String The related object name oIdsSet Type: Set IDs of related parents ActionPlansQueueableBuilder Methods execute(qc) Instead of a batch, we use queuable because it's more simple than Batch Apex execute(qc) Instead of a batch, we use queuable because it's more simple than Batch Apex Signature public void execute(QueueableContext qc) Parameters qc Type: QueueableContext QueueableContext (note: not BatchableContext which is in Batch Apex) See ActionPlansBuilderUtilities.generateActionPlans"
+ "text": "ActionPlansQueueableBuilder Queueable Apex for creating Action Plans Signature public inherited sharing class ActionPlansQueueableBuilder implements Queueable See ActionPlansBuilderUtilities Author David Schach Since 2022 ActionPlansQueueableBuilder Properties Name Signature buildUtil private ActionPlansBuilderUtilities buildUtil ActionPlansQueueableBuilder Constructors ActionPlansQueueableBuilder(baseObj, aPTList, refType, oIdsSet) Constructor ActionPlansQueueableBuilder(baseObj, aPTList, refType, oIdsSet) Constructor Signature public ActionPlansQueueableBuilder(ActionPlan__c baseObj, List aPTList, String refType, Set oIdsSet) Parameters baseObj Type: ActionPlan__c ActionPlan base aPTList Type: List List of the task templates refType Type: String The related object name oIdsSet Type: Set IDs of related parents See ActionPlansBuilderUtilities.ActionPlansBuilderUtilities ActionPlansQueueableBuilder Methods execute(qc) Instead of a batch, we use queuable because it's more simple than Batch Apex TODO: Change email error notification to Lightning notification execute(qc) Instead of a batch, we use queuable because it's more simple than Batch Apex TODO: Change email error notification to Lightning notification Signature public void execute(QueueableContext qc) Parameters qc Type: QueueableContext QueueableContext (note: not BatchableContext which is in Batch Apex) See ActionPlansBuilderUtilities.generateActionPlans"
},
{
"title": "ActionPlansRedirect",
"fileName": "ActionPlansRedirect.html",
- "text": "ActionPlansRedirect Visualforce controller for a redirect page to allow override of object actions Signature public with sharing class ActionPlansRedirect David Schach 2022 ActionPlansRedirect Properties Name Signature Description actionPlan private ActionPlan__c actionPlan actionPlanTask private APTask__c actionPlanTask actionPlanTemplate private ActionPlanTemplate__c actionPlanTemplate actionPlanTemplateTask private APTemplateTask__c actionPlanTemplateTask objName public String objName Related object name so this page can work for multiple SObject Types parentId private Id parentId recordId private Id recordId ActionPlansRedirect Constructors ActionPlansRedirect(controller) Extension Constructor Gets the SObjectType and returns the correct object to display the correct values ActionPlansRedirect(controller) Extension Constructor Gets the SObjectType and returns the correct object to display the correct values Signature public ActionPlansRedirect(ApexPages.StandardController controller) Parameters controller Type: ApexPages.StandardController Standard Controller. Accepts any SObject ActionPlansRedirect Methods cancel() Go back to view the relevant record redirect() Show the view page for either the Action Plan or the Action Plan Template save() Change the relevant record owner, and then call cancel so we go back to the record page cancel() Go back to view the relevant record Signature public PageReference cancel() Returns PageReference for the parent record redirect() Show the view page for either the Action Plan or the Action Plan Template Signature public Pagereference redirect() Returns PageReference by recordId('/' + parentId) save() Change the relevant record owner, and then call cancel so we go back to the record page Signature public PageReference save() Returns ActionPlansRedirect.cancel"
+ "text": "ActionPlansRedirect Visualforce controller for a redirect page to allow override of object actions Signature public with sharing class ActionPlansRedirect Author David Schach Since 2022 ActionPlansRedirect Properties Name Signature Description actionPlan private ActionPlan__c actionPlan actionPlanTask private APTask__c actionPlanTask actionPlanTemplate private ActionPlanTemplate__c actionPlanTemplate actionPlanTemplateTask private APTemplateTask__c actionPlanTemplateTask objName public String objName Related object name so this page can work for multiple SObject Types parentId private Id parentId recordId private Id recordId ActionPlansRedirect Constructors ActionPlansRedirect(controller) Extension Constructor Gets the SObjectType and returns the correct object to display the correct values ActionPlansRedirect(controller) Extension Constructor Gets the SObjectType and returns the correct object to display the correct values Signature public ActionPlansRedirect(ApexPages.StandardController controller) Parameters controller Type: ApexPages.StandardController Standard Controller. Accepts any SObject ActionPlansRedirect Methods cancel() Go back to view the relevant record redirect() Show the view page for either the Action Plan or the Action Plan Template save() Change the relevant record owner, and then call cancel so we go back to the record page cancel() Go back to view the relevant record Signature public PageReference cancel() Returns PageReference for the parent record redirect() Show the view page for either the Action Plan or the Action Plan Template Signature public Pagereference redirect() Returns PageReference by recordId('/' + parentId) save() Change the relevant record owner, and then call cancel so we go back to the record page Signature public PageReference save() Returns ActionPlansRedirect.cancel"
},
{
"title": "ActionPlansSectionHeaderController",
"fileName": "ActionPlansSectionHeaderController.html",
- "text": "ActionPlansSectionHeaderController Controller for the Section Header at the top of every VF page. Determines the icon for the page object Code adapted from StackExchange Signature public inherited sharing class ActionPlansSectionHeaderController See https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon David Schach Cricketlang 2022 Example ActionPlansSectionHeaderController Properties Name Signature Description objectName public String objectName The object name for the Section Header orgObject private String orgObject String to hold actual used object in case of namespaced app ActionPlansSectionHeaderController Methods getIsCustom() Is this a custom object? getObjectIconInfo() Map of Icon attribute and value isCustom(sObjectName) Given an object name, return if it is a custom object retrieveIconForObject(sObjectName) Explores the schema of the soject passed in and finds lightning icon style and image url for sObject If nothing is found, defaults to the custom icon Code adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Thanks to https://salesforce.stackexchange.com/users/12582/cricketlang getIsCustom() Is this a custom object? Signature public Boolean getIsCustom() Returns Boolean true if custom object See ActionPlansSectionHeaderController.isCustom getObjectIconInfo() Map of Icon attribute and value Signature public Map getObjectIconInfo() Returns Map Key-value pairs\\ See ActionPlansSectionHeaderController.retrieveIconForObject isCustom(sObjectName) Given an object name, return if it is a custom object Signature private Boolean isCustom(String sObjectName) Parameters sObjectName Type: String The name of the SObject Returns Boolean Is this object a custom object? retrieveIconForObject(sObjectName) Explores the schema of the soject passed in and finds lightning icon style and image url for sObject If nothing is found, defaults to the custom icon Code adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Thanks to https://salesforce.stackexchange.com/users/12582/cricketlang Signature private Map retrieveIconForObject(String sObjectName) Parameters sObjectName Type: String The sObject to find the icon for Returns Map Map of properties about the icon to be consumed by the front end. Returns values for keys: iconStyle,iconURL"
+ "text": "ActionPlansSectionHeaderController Controller for the Section Header at the top of every VF page. Determines the icon for the page object Code adapted from StackExchange Signature public inherited sharing class ActionPlansSectionHeaderController See https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Since 2022 Authors David Schach , Cricketlang Example ActionPlansSectionHeaderController Properties Name Signature Description objectName public String objectName The object name for the Section Header orgObject private String orgObject String to hold actual used object in case of namespaced app ActionPlansSectionHeaderController Methods getIsCustom() Is this a custom object? getObjectIconInfo() Map of Icon attribute and value isCustom(sObjectName) Given an object name, return if it is a custom object queryRecords(queryText) Main code for lightning lookup. Included in this class because we use this as the controller for our lookups the code is duplicated in AciontPlanCreationController because there is a lookup directly in that page(for now) This is a different approach than in ActionPlanCreationController, as we pass in the full query here, but there it is done by passing only the search key. retrieveIconForObject(sObjectName) Explores the schema of the soject passed in and finds lightning icon style and image url for sObject If nothing is found, defaults to the custom icon Code adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Thanks to https://salesforce.stackexchange.com/users/12582/cricketlang Todo: Avoid describing all applications and tabs, and even use \"break\" to shorten the runtime getIsCustom() Is this a custom object? Signature public Boolean getIsCustom() Returns Boolean true if custom object See ActionPlansSectionHeaderController.isCustom getObjectIconInfo() Map of Icon attribute and value Signature public Map getObjectIconInfo() Returns Map Key-value pairs\\ See ActionPlansSectionHeaderController.retrieveIconForObject isCustom(sObjectName) Given an object name, return if it is a custom object Signature private Boolean isCustom(String sObjectName) Parameters sObjectName Type: String The name of the SObject Returns Boolean Is this object a custom object? queryRecords(queryText) Main code for lightning lookup. Included in this class because we use this as the controller for our lookups the code is duplicated in AciontPlanCreationController because there is a lookup directly in that page(for now) This is a different approach than in ActionPlanCreationController, as we pass in the full query here, but there it is done by passing only the search key. Signature @RemoteAction public static List queryRecords(String queryText) Parameters queryText Type: String SOQL query to return records for the lookup Returns List Returned records See ActionPlanCreationController retrieveIconForObject(sObjectName) Explores the schema of the soject passed in and finds lightning icon style and image url for sObject If nothing is found, defaults to the custom icon Code adapted from https://salesforce.stackexchange.com/questions/116688/lightning-get-sobject-tab-icon Thanks to https://salesforce.stackexchange.com/users/12582/cricketlang Todo: Avoid describing all applications and tabs, and even use \"break\" to shorten the runtime Signature private Map retrieveIconForObject(String sObjectName) Parameters sObjectName Type: String The sObject to find the icon for Returns Map Map of properties about the icon to be consumed by the front end. Returns values for keys: iconStyle,iconURL"
},
{
"title": "ActionPlansTaskTriggerUtilities",
"fileName": "ActionPlansTaskTriggerUtilities.html",
- "text": "ActionPlansTaskTriggerUtilities Set to WITHOUT sharing because this is only called from a trigger handler Signature public without sharing class ActionPlansTaskTriggerUtilities David Schach 2022 ActionPlansTaskTriggerUtilities Properties Name Signature dependentApts private static List dependentApts tasksSendEmail private static List tasksSendEmail tasksSendNoEmail private static List tasksSendNoEmail ActionPlansTaskTriggerUtilities Methods actionsOnTaskBeforeDelete(cTasks) Before deleting an APTemplate task, initialize the functionalities to create all dependent Tasks and reset index deleteAPTasks(aPTasks) Delete Action Plan Tasks deleteTasks(apttIds) Delete Action Plan Tasks related Tasks generateDependentTasksAndReset(apTasks, taskIndexToDelete) This method reviews the task list FOR A SINGLE ACTION PLAN and removes the one with TaskIndex__c field matching taskIndexToDelete. Rearranges the dependencies between tasks. initDependentTaskWork(taskIdMap) Initialize the functionalities to create all dependent Tasks populateUpdateApttsList(dependentAptList) Cycle through list of dependent Action Plans Template Task and create tasks queryDependentAPTaskTemplates(closedTasks) Get list of dependent Action Plan Template Tasks updateAPTasksStatus(apTasksMap) Update APTasks status as passed into method to match Task Status upsertDependentAPTasks(dependentAptList) Cycle through list of dependent Action Plans Tasks and create Task records actionsOnTaskBeforeDelete(cTasks) Before deleting an APTemplate task, initialize the functionalities to create all dependent Tasks and reset index Signature public static void actionsOnTaskBeforeDelete(Set cTasks) Parameters cTasks Type: Set Set of Task template IDs to be deleted See ActionPlansTaskTriggerUtilities.generateDependentTasksAndReset deleteAPTasks(aPTasks) Delete Action Plan Tasks Signature public static void deleteAPTasks(Set aPTasks) Parameters aPTasks Type: Set Ids of APTasks to delete deleteTasks(apttIds) Delete Action Plan Tasks related Tasks Signature public static void deleteTasks(Set apttIds) Parameters apttIds Type: Set Task IDs to delete generateDependentTasksAndReset(apTasks, taskIndexToDelete) This method reviews the task list FOR A SINGLE ACTION PLAN and removes the one with TaskIndex__c field matching taskIndexToDelete. Rearranges the dependencies between tasks. Signature private static void generateDependentTasksAndReset(List