├── .forceignore ├── .gitignore ├── .prettierignore ├── .prettierrc ├── .sf ├── config.json └── orgs │ └── 00D8H0000005h5UUAQ │ ├── localSourceTracking │ ├── HEAD │ ├── config │ ├── index │ ├── objects │ │ ├── 11 │ │ │ └── 265b6180453c96585e71880b0c5af40a729cef │ │ ├── 13 │ │ │ └── fa536d098e88556a88aadff07a214de1da516a │ │ ├── 22 │ │ │ └── 54a7bc945aa658ea339d089e58c35d21d1de91 │ │ ├── 23 │ │ │ └── e68054c478a617add887828e93a0de521f45f8 │ │ ├── 25 │ │ │ └── 2fbfd041e8d7788983b41e40a4c6a1b8efd7e8 │ │ ├── 38 │ │ │ └── 14e5be44d101f50a661ba0365367816daa02c3 │ │ ├── 40 │ │ │ └── 51cbd0bbf6fb7b140b19e57d7d2d2e8e1e014e │ │ ├── 42 │ │ │ └── 064a26326963d9114810d97a5d1571835846ce │ │ ├── 43 │ │ │ └── f4823c823c34d021fe368aab1d29084d411e5f │ │ ├── 44 │ │ │ └── ef81c9c08ef363dff87d4c25d30e7fcd9a07cd │ │ ├── 46 │ │ │ └── 52dfcfa657768533301048137bbc98d9d65c14 │ │ ├── 49 │ │ │ └── f79021f7eefdf0b5e666660e6bce1cf9fe5762 │ │ ├── 53 │ │ │ └── 7270f39adc3744bf39db4c2693e5c0de391073 │ │ ├── 61 │ │ │ ├── 51480682fb8b1f0751613e160793ef09d941d4 │ │ │ └── bd8fa21c5a668d55795dda31b1c29f917e54cd │ │ ├── 65 │ │ │ └── e5c711a7506ae9337aa747c48524f04c78627f │ │ ├── 67 │ │ │ ├── 857e2736878cbed51e4c75ab2ad9d99ffd058c │ │ │ └── 8ea6afe6948e9bbf818a1a1130ef83fbddb0c4 │ │ ├── 68 │ │ │ └── b9605fc2ec305dfd73800452a61b4106d2d206 │ │ ├── 70 │ │ │ ├── 359c64e1fcf965c8e68b6353f22abe1a8985b2 │ │ │ └── f5e654f05b309bff98c8c209f0acadf0a6efe1 │ │ ├── 72 │ │ │ └── 2411fa712d1e8e018d8e6a5b80e92384ecc511 │ │ ├── 74 │ │ │ └── 957ce0179ef4930d17cbd367c50566baa5e770 │ │ ├── 75 │ │ │ └── 45a75f9c4db4b0cbc846c235b323cb8af53e36 │ │ ├── 80 │ │ │ ├── 0f41ba2b28f852cb31391ab49d0384a0b5e38f │ │ │ ├── 2f20e9b910fab47143b356c03d6727f9a642a3 │ │ │ └── 4080dbdb239962dca9089e5b85f055d94893ff │ │ ├── 81 │ │ │ └── d01d788e29e8e81356cd81d97658f83a082463 │ │ ├── 82 │ │ │ ├── 07dc4872ccd352085261e99c7f823aa63fa9f6 │ │ │ └── 6993ba20516711405e71220aaee3e526a1160a │ │ ├── 84 │ │ │ └── d5081eaae25709e572ebb125caaf50a454b053 │ │ ├── 85 │ │ │ └── 89de506eb2388de3e306e8d3124adf2eba6007 │ │ ├── 88 │ │ │ └── ebfdc40dde64663c99ec91f6dddcc92b316f02 │ │ ├── 89 │ │ │ ├── 642409cebd1701b1c4bc230fbe16bae0d2ef6e │ │ │ └── 88528d878facd250564ba0d68184b9cc449327 │ │ ├── 93 │ │ │ ├── 6814d6442194b7931a6f818c63829ba5a604ef │ │ │ └── be2278f2f252dfee19e5c8963d64029aad824e │ │ ├── 96 │ │ │ └── d517900d0c315e239aa0ff427c1e3a2e61f5db │ │ ├── 98 │ │ │ ├── 0dfdb4c43873e9e145932ee19212362ac8a8ae │ │ │ └── 12f88c72ab32f80c4c9417768059aa382ab8ed │ │ ├── 02 │ │ │ └── 666eef77cf780bad2c5b3cf32f360bab435182 │ │ ├── 06 │ │ │ └── d08a684c6b505fc0a3f20fe3944e7de7f8b0fe │ │ ├── 07 │ │ │ ├── 6a841fa7c7a4ad6308f74f94849c60a282e9a2 │ │ │ └── dd8423904b64039a865413df9627cf1a6bdbfc │ │ ├── 08 │ │ │ └── fb13aab761f9f8c0942dcd88738a2840e19009 │ │ ├── 0a │ │ │ └── 97708463cd1639443b2aa5bcf7ccf168a92e6b │ │ ├── 0b │ │ │ ├── 3adf55bcb6d4f26f6f35531a2ef79ca9f6157b │ │ │ └── e99763c862b128919d90317201cd964d657c63 │ │ ├── 0c │ │ │ └── f267ccdf21ddfa15d55cb7e0e98cc4e441eccf │ │ ├── 0e │ │ │ └── 49ffed36b9b093871dbd0838b6be72a1ec1ee5 │ │ ├── 1d │ │ │ └── a9dd14145ebf2b4cab61eb5fc87f1602e1ec24 │ │ ├── 1f │ │ │ └── b12e62e5e389b4e7cb4f2d5b71b2b17e46d6fb │ │ ├── 2a │ │ │ └── 61f6219fdb9aa68c5c623442aaf0bb9eb769a6 │ │ ├── 2c │ │ │ └── 5f227ad56aad55907bc4e1f5503b2c5350a14b │ │ ├── 2e │ │ │ └── 85821013a3635b4f8d3ede2f3967dd006e3032 │ │ ├── 3a │ │ │ ├── 69be85e46f7806e202c1c574490016e38a12fc │ │ │ └── 8dccdb8ef2b33c8af8aa487b766daba9a51526 │ │ ├── 3f │ │ │ ├── 48c48eb033042ce654b30309ba35a3c63c14f7 │ │ │ └── c3e884c766229cbed30d67a2b96382e27771f4 │ │ ├── 4d │ │ │ └── 9c48fb068d5dc37fe36ad4ca4854b0b0417971 │ │ ├── 5f │ │ │ └── 520470f04be9f9c6cfac59df7ec0c2b51a1351 │ │ ├── 6c │ │ │ └── b2abe62cc97e3563cf22fdbd9a5a293c8fd877 │ │ ├── 7f │ │ │ └── 653cbd5b5f4deec5e110ac07c5aff1e179ed08 │ │ ├── 9b │ │ │ └── db6249b81ca82eb424847e24d5e1db9aded57b │ │ ├── a1 │ │ │ ├── 606337c19fa75028ee91e37e0b8bad0a401352 │ │ │ └── cfa4504be11ff6c9ab4cff3a2a1d196eaf48a6 │ │ ├── a2 │ │ │ ├── 0181d11e152514ec40e3744a0ce9802fe2b1af │ │ │ └── aef6262ae6f1c5d09dad8e7349c933ab80b5cc │ │ ├── a3 │ │ │ └── 6e29ca72a0d77d128efe026f09d06c3ff6caa9 │ │ ├── a6 │ │ │ ├── 130d1489e9c72a1b8a432b46e36c6679fca21f │ │ │ └── da3d655abad407e736daa988d4d84a85bc4e6e │ │ ├── a9 │ │ │ └── dab9248ea99eee0c5147bed7ac7c72f1753779 │ │ ├── ac │ │ │ ├── 3005d1163b12e0a4890f120a42f7d55edd04e9 │ │ │ └── 9b637a24ce3da43b376a2adec008fc8c4a9178 │ │ ├── ad │ │ │ ├── 2f86605c7fdd7c6ddd62201dd38007c311b84e │ │ │ └── 31cdb5ec215c4db2ef1263b220787c2e5c7ddf │ │ ├── af │ │ │ └── 8eb70842c856d1837691597b5c91607dfe45ee │ │ ├── b4 │ │ │ └── d62430c46c14eee75f258518d9a58375b9679b │ │ ├── bd │ │ │ ├── 0c8bd3657a0ed496f3d306c7b38e3844c67f56 │ │ │ └── acf2c4e2f96255c8b53ea797e081c21397d23f │ │ ├── be │ │ │ └── da8e8afc48a39f4836e249e9512c125b4a7c87 │ │ ├── c1 │ │ │ ├── 2d2d25ba968ef018f9c1281f3b9de0cd5a68b1 │ │ │ └── fe6dc08b0cdd9014112c3881a9ec07d2f1a85b │ │ ├── c4 │ │ │ └── b01cd014912e049019f05fd701afe2d8a9c198 │ │ ├── c8 │ │ │ └── 6f2542ca85249781b1608bcc3e72b4771ca282 │ │ ├── ca │ │ │ └── 00c3f2bf67d68401c8a0dad7aa9d23fdc6ce6b │ │ ├── cb │ │ │ └── 7636c53eaf843865b31f086f10a8a86209281e │ │ ├── cc │ │ │ └── ac92691a6bdef949e50be8b529fc6b5f5379f5 │ │ ├── cd │ │ │ └── b87bc2948335619f607e8f717fc963417bb149 │ │ ├── ce │ │ │ └── cf6aaa74d27b7557b9c99551e1e02ff53fb0e9 │ │ ├── d0 │ │ │ └── 073a6cfc09f4249d52e020559b4e14af9fed9a │ │ ├── d1 │ │ │ └── 0d10bec2f8b1f4895e144c30004770de81a7cc │ │ ├── d3 │ │ │ └── aabb86575ea5355ba634b4dea8c6b2cd5af94f │ │ ├── d9 │ │ │ └── c891cd172bf7eef5eae510ce272e0ec40ca0f7 │ │ ├── db │ │ │ └── 9bf8c6a58cb0350505fed41d070aab82eda6ef │ │ ├── dc │ │ │ └── f75973b2a84d2cf9e493e68071dfd44532bdcc │ │ ├── dd │ │ │ └── 61d1f917ee6c8728de4fd7d9883d47a2c4dc66 │ │ ├── df │ │ │ └── 54197dfca5f9e964b9101189c756f0b65aa335 │ │ ├── e2 │ │ │ └── 086a901a2e431222dfbe59b803c2aa8894f4b6 │ │ ├── e3 │ │ │ └── 0f908ff9bfb6568b7ac714299ce61481e45caa │ │ ├── ec │ │ │ └── 31de6fffd6e2be2f096f60a1d9b95ce5513d4f │ │ ├── ee │ │ │ └── 8a3ea83302bd57796d19193e2c04769243f45c │ │ ├── f3 │ │ │ └── 18cca17dc099914354f1509baf1b19b8add0b9 │ │ ├── fb │ │ │ └── 968b626e34c0c61ea1b53d98ed4341a6f2263d │ │ └── fe │ │ │ └── 3bb35e14bdf4df2f3c6ee2e79f2df6ca1016b5 │ └── refs │ │ └── heads │ │ └── main │ └── maxRevision.json ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── IlluminatedCloud └── flow_autotests4 │ └── OfflineSymbolTable.zip ├── README.md ├── config └── project-scratch-def.json ├── force-app └── main │ └── default │ ├── classes │ ├── AssembleInputParams.cls │ ├── AssembleInputParams.cls-meta.xml │ ├── AssembleInputParamsTest.cls │ ├── AssembleInputParamsTest.cls-meta.xml │ ├── CountRecordsAndFields.cls │ ├── CountRecordsAndFields.cls-meta.xml │ ├── CountRecordsAndFieldsTest.cls │ ├── CountRecordsAndFieldsTest.cls-meta.xml │ ├── DeployApexClass.cls │ ├── DeployApexClass.cls-meta.xml │ ├── FlowTestDefinition.cls │ ├── FlowTestDefinition.cls-meta.xml │ ├── FlowTestGenerator.cls │ ├── FlowTestGenerator.cls-meta.xml │ ├── FlowTestGeneratorTest.cls │ ├── FlowTestGeneratorTest.cls-meta.xml │ ├── FlowVariable.cls │ ├── FlowVariable.cls-meta.xml │ ├── FlowVariableSet.cls │ ├── FlowVariableSet.cls-meta.xml │ ├── FormulaBuilderController.cls │ ├── FormulaBuilderController.cls-meta.xml │ ├── FormulaBuilderControllerTest.cls │ ├── FormulaBuilderControllerTest.cls-meta.xml │ ├── GetFirst.cls │ ├── GetFirst.cls-meta.xml │ ├── GetFirstTest.cls │ ├── GetFirstTest.cls-meta.xml │ ├── GetFlowVariables.cls │ ├── GetFlowVariables.cls-meta.xml │ ├── GetFlowVariablesTest.cls │ ├── GetFlowVariablesTest.cls-meta.xml │ ├── SObjectController2.cls │ ├── SObjectController2.cls-meta.xml │ ├── SObjectController2Test.cls │ ├── SObjectController2Test.cls-meta.xml │ ├── Test_Autolaunched_Flow_Test.cls │ ├── Test_Autolaunched_Flow_Test.cls-meta.xml │ ├── UpdateField.cls │ ├── UpdateField.cls-meta.xml │ ├── UpdateFieldAction.cls │ ├── UpdateFieldAction.cls-meta.xml │ ├── UpdateFieldActionTest.cls │ ├── UpdateFieldActionTest.cls-meta.xml │ ├── UpdateFieldTest.cls │ └── UpdateFieldTest.cls-meta.xml │ ├── flows │ ├── Flow_Test_Generator.flow-meta.xml │ ├── TestFlow_SimpleAutolaunched.flow-meta.xml │ └── Test_Autolaunched_Flow.flow-meta.xml │ ├── labels │ └── CustomLabels.labels-meta.xml │ ├── lwc │ ├── .eslintrc.json │ ├── buttonUtils │ │ ├── buttonUtils.js │ │ └── buttonUtils.js-meta.xml │ ├── datatableV2 │ │ ├── datatableV2.html │ │ ├── datatableV2.js │ │ └── datatableV2.js-meta.xml │ ├── flowPickerFSC │ │ ├── flowPickerFSC.html │ │ ├── flowPickerFSC.js │ │ └── flowPickerFSC.js-meta.xml │ ├── flowTestGeneratorUtils │ │ ├── flowTestGeneratorUtils.js │ │ └── flowTestGeneratorUtils.js-meta.xml │ ├── flowTestSetAssertions │ │ ├── flowTestSetAssertions.css │ │ ├── flowTestSetAssertions.html │ │ ├── flowTestSetAssertions.js │ │ └── flowTestSetAssertions.js-meta.xml │ ├── flowTestSetInputVariables │ │ ├── flowTestSetInputVariables.html │ │ ├── flowTestSetInputVariables.js │ │ └── flowTestSetInputVariables.js-meta.xml │ ├── jsconfig.json │ ├── setOwner │ │ ├── setOwner.css │ │ ├── setOwner.html │ │ ├── setOwner.js │ │ └── setOwner.js-meta.xml │ ├── setPickList │ │ ├── setPickList.html │ │ ├── setPickList.js │ │ └── setPickList.js-meta.xml │ └── updateFieldCPE │ │ ├── updateFieldCPE.html │ │ ├── updateFieldCPE.js │ │ └── updateFieldCPE.js-meta.xml │ ├── objects │ ├── Flow_Test_Method_Assertion__c │ │ ├── Flow_Test_Method_Assertion__c.object-meta.xml │ │ └── fields │ │ │ ├── Assertion_Formula__c.field-meta.xml │ │ │ ├── Error_Message__c.field-meta.xml │ │ │ └── Flow_Test__c.field-meta.xml │ ├── Flow_Test_Method_Input_Variable__c │ │ ├── Flow_Test_Method_Input_Variable__c.object-meta.xml │ │ └── fields │ │ │ ├── Flow_Test__c.field-meta.xml │ │ │ ├── Type__c.field-meta.xml │ │ │ └── Value__c.field-meta.xml │ └── Flow_Test__c │ │ ├── Flow_Test__c.object-meta.xml │ │ └── fields │ │ ├── Apex_Class_Name__c.field-meta.xml │ │ ├── Flow_Api_Name__c.field-meta.xml │ │ └── Namespace__c.field-meta.xml │ ├── permissionsets │ └── Flow_Test_Manager.permissionset-meta.xml │ └── remoteSiteSettings │ └── curOrg.remoteSite-meta.xml ├── scripts ├── apex │ └── hello.apex └── soql │ └── account.soql └── sfdx-project.json /.forceignore: -------------------------------------------------------------------------------- 1 | # List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status 2 | # More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm 3 | # 4 | package.xml 5 | **profile 6 | 7 | # LWC configuration files 8 | **/jsconfig.json 9 | **/.eslintrc.json 10 | 11 | # LWC Jest 12 | **/__tests__/** -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # This file is used for Git repositories to specify intentionally untracked files that Git should ignore. 2 | # If you are not using git, you can delete this file. For more information see: https://git-scm.com/docs/gitignore 3 | # For useful gitignore templates see: https://github.com/github/gitignore 4 | 5 | # Salesforce cache 6 | .sfdx/ 7 | .localdevserver/ 8 | 9 | # Logs 10 | logs 11 | *.log 12 | npm-debug.log* 13 | yarn-debug.log* 14 | yarn-error.log* 15 | 16 | # Dependency directories 17 | node_modules/ 18 | 19 | # Eslint cache 20 | .eslintcache 21 | 22 | # MacOS system files 23 | .DS_Store 24 | 25 | # Windows system files 26 | Thumbs.db 27 | ehthumbs.db 28 | [Dd]esktop.ini 29 | $RECYCLE.BIN/ 30 | /IlluminatedCloud/flow_atotests5/OfflineSymbolTable.zip 31 | /IlluminatedCloud/flow_test_generator/OfflineSymbolTable.zip 32 | /.idea/.gitignore 33 | /.idea/illuminatedCloud.xml 34 | /.idea/misc.xml 35 | /.idea/modules.xml 36 | /.idea/vcs.xml 37 | /IlluminatedCloud/ 38 | /.idea/FlowTestGenerator.iml 39 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # List files or directories below to ignore them when running prettier 2 | # More information: https://prettier.io/docs/en/ignore.html 3 | # 4 | 5 | .sfdx 6 | .localdevserver -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none", 3 | "overrides": [ 4 | { 5 | "files": "**/lwc/**/*.html", 6 | "options": { "parser": "lwc" } 7 | }, 8 | { 9 | "files": "*.{cmp,page,component}", 10 | "options": { "parser": "html" } 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.sf/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "target-dev-hub": "lexhost", 3 | "target-org": "test1" 4 | } -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/HEAD: -------------------------------------------------------------------------------- 1 | ref: refs/heads/main 2 | -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/config: -------------------------------------------------------------------------------- 1 | [core] 2 | repositoryformatversion = 0 3 | filemode = false 4 | bare = false 5 | logallrefupdates = true 6 | symlinks = false 7 | ignorecase = true 8 | -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/index -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/02/666eef77cf780bad2c5b3cf32f360bab435182: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/02/666eef77cf780bad2c5b3cf32f360bab435182 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/06/d08a684c6b505fc0a3f20fe3944e7de7f8b0fe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/06/d08a684c6b505fc0a3f20fe3944e7de7f8b0fe -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/07/6a841fa7c7a4ad6308f74f94849c60a282e9a2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/07/6a841fa7c7a4ad6308f74f94849c60a282e9a2 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/07/dd8423904b64039a865413df9627cf1a6bdbfc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/07/dd8423904b64039a865413df9627cf1a6bdbfc -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/08/fb13aab761f9f8c0942dcd88738a2840e19009: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/08/fb13aab761f9f8c0942dcd88738a2840e19009 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0a/97708463cd1639443b2aa5bcf7ccf168a92e6b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0a/97708463cd1639443b2aa5bcf7ccf168a92e6b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0b/3adf55bcb6d4f26f6f35531a2ef79ca9f6157b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0b/3adf55bcb6d4f26f6f35531a2ef79ca9f6157b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0b/e99763c862b128919d90317201cd964d657c63: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0b/e99763c862b128919d90317201cd964d657c63 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0c/f267ccdf21ddfa15d55cb7e0e98cc4e441eccf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0c/f267ccdf21ddfa15d55cb7e0e98cc4e441eccf -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0e/49ffed36b9b093871dbd0838b6be72a1ec1ee5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/0e/49ffed36b9b093871dbd0838b6be72a1ec1ee5 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/11/265b6180453c96585e71880b0c5af40a729cef: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/11/265b6180453c96585e71880b0c5af40a729cef -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/13/fa536d098e88556a88aadff07a214de1da516a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/13/fa536d098e88556a88aadff07a214de1da516a -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/1d/a9dd14145ebf2b4cab61eb5fc87f1602e1ec24: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/1d/a9dd14145ebf2b4cab61eb5fc87f1602e1ec24 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/1f/b12e62e5e389b4e7cb4f2d5b71b2b17e46d6fb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/1f/b12e62e5e389b4e7cb4f2d5b71b2b17e46d6fb -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/22/54a7bc945aa658ea339d089e58c35d21d1de91: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/22/54a7bc945aa658ea339d089e58c35d21d1de91 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/23/e68054c478a617add887828e93a0de521f45f8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/23/e68054c478a617add887828e93a0de521f45f8 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/25/2fbfd041e8d7788983b41e40a4c6a1b8efd7e8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/25/2fbfd041e8d7788983b41e40a4c6a1b8efd7e8 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/2a/61f6219fdb9aa68c5c623442aaf0bb9eb769a6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/2a/61f6219fdb9aa68c5c623442aaf0bb9eb769a6 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/2c/5f227ad56aad55907bc4e1f5503b2c5350a14b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/2c/5f227ad56aad55907bc4e1f5503b2c5350a14b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/2e/85821013a3635b4f8d3ede2f3967dd006e3032: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/2e/85821013a3635b4f8d3ede2f3967dd006e3032 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/38/14e5be44d101f50a661ba0365367816daa02c3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/38/14e5be44d101f50a661ba0365367816daa02c3 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3a/69be85e46f7806e202c1c574490016e38a12fc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3a/69be85e46f7806e202c1c574490016e38a12fc -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3a/8dccdb8ef2b33c8af8aa487b766daba9a51526: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3a/8dccdb8ef2b33c8af8aa487b766daba9a51526 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3f/48c48eb033042ce654b30309ba35a3c63c14f7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3f/48c48eb033042ce654b30309ba35a3c63c14f7 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3f/c3e884c766229cbed30d67a2b96382e27771f4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/3f/c3e884c766229cbed30d67a2b96382e27771f4 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/40/51cbd0bbf6fb7b140b19e57d7d2d2e8e1e014e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/40/51cbd0bbf6fb7b140b19e57d7d2d2e8e1e014e -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/42/064a26326963d9114810d97a5d1571835846ce: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/42/064a26326963d9114810d97a5d1571835846ce -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/43/f4823c823c34d021fe368aab1d29084d411e5f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/43/f4823c823c34d021fe368aab1d29084d411e5f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/44/ef81c9c08ef363dff87d4c25d30e7fcd9a07cd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/44/ef81c9c08ef363dff87d4c25d30e7fcd9a07cd -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/46/52dfcfa657768533301048137bbc98d9d65c14: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/46/52dfcfa657768533301048137bbc98d9d65c14 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/49/f79021f7eefdf0b5e666660e6bce1cf9fe5762: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/49/f79021f7eefdf0b5e666660e6bce1cf9fe5762 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/4d/9c48fb068d5dc37fe36ad4ca4854b0b0417971: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/4d/9c48fb068d5dc37fe36ad4ca4854b0b0417971 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/53/7270f39adc3744bf39db4c2693e5c0de391073: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/53/7270f39adc3744bf39db4c2693e5c0de391073 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/5f/520470f04be9f9c6cfac59df7ec0c2b51a1351: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/5f/520470f04be9f9c6cfac59df7ec0c2b51a1351 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/61/51480682fb8b1f0751613e160793ef09d941d4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/61/51480682fb8b1f0751613e160793ef09d941d4 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/61/bd8fa21c5a668d55795dda31b1c29f917e54cd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/61/bd8fa21c5a668d55795dda31b1c29f917e54cd -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/65/e5c711a7506ae9337aa747c48524f04c78627f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/65/e5c711a7506ae9337aa747c48524f04c78627f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/67/857e2736878cbed51e4c75ab2ad9d99ffd058c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/67/857e2736878cbed51e4c75ab2ad9d99ffd058c -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/67/8ea6afe6948e9bbf818a1a1130ef83fbddb0c4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/67/8ea6afe6948e9bbf818a1a1130ef83fbddb0c4 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/68/b9605fc2ec305dfd73800452a61b4106d2d206: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/68/b9605fc2ec305dfd73800452a61b4106d2d206 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/6c/b2abe62cc97e3563cf22fdbd9a5a293c8fd877: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/6c/b2abe62cc97e3563cf22fdbd9a5a293c8fd877 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/70/359c64e1fcf965c8e68b6353f22abe1a8985b2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/70/359c64e1fcf965c8e68b6353f22abe1a8985b2 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/70/f5e654f05b309bff98c8c209f0acadf0a6efe1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/70/f5e654f05b309bff98c8c209f0acadf0a6efe1 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/72/2411fa712d1e8e018d8e6a5b80e92384ecc511: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/72/2411fa712d1e8e018d8e6a5b80e92384ecc511 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/74/957ce0179ef4930d17cbd367c50566baa5e770: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/74/957ce0179ef4930d17cbd367c50566baa5e770 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/75/45a75f9c4db4b0cbc846c235b323cb8af53e36: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/75/45a75f9c4db4b0cbc846c235b323cb8af53e36 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/7f/653cbd5b5f4deec5e110ac07c5aff1e179ed08: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/7f/653cbd5b5f4deec5e110ac07c5aff1e179ed08 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/80/0f41ba2b28f852cb31391ab49d0384a0b5e38f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/80/0f41ba2b28f852cb31391ab49d0384a0b5e38f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/80/2f20e9b910fab47143b356c03d6727f9a642a3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/80/2f20e9b910fab47143b356c03d6727f9a642a3 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/80/4080dbdb239962dca9089e5b85f055d94893ff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/80/4080dbdb239962dca9089e5b85f055d94893ff -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/81/d01d788e29e8e81356cd81d97658f83a082463: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/81/d01d788e29e8e81356cd81d97658f83a082463 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/82/07dc4872ccd352085261e99c7f823aa63fa9f6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/82/07dc4872ccd352085261e99c7f823aa63fa9f6 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/82/6993ba20516711405e71220aaee3e526a1160a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/82/6993ba20516711405e71220aaee3e526a1160a -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/84/d5081eaae25709e572ebb125caaf50a454b053: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/84/d5081eaae25709e572ebb125caaf50a454b053 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/85/89de506eb2388de3e306e8d3124adf2eba6007: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/85/89de506eb2388de3e306e8d3124adf2eba6007 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/88/ebfdc40dde64663c99ec91f6dddcc92b316f02: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/88/ebfdc40dde64663c99ec91f6dddcc92b316f02 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/89/642409cebd1701b1c4bc230fbe16bae0d2ef6e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/89/642409cebd1701b1c4bc230fbe16bae0d2ef6e -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/89/88528d878facd250564ba0d68184b9cc449327: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/89/88528d878facd250564ba0d68184b9cc449327 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/93/6814d6442194b7931a6f818c63829ba5a604ef: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/93/6814d6442194b7931a6f818c63829ba5a604ef -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/93/be2278f2f252dfee19e5c8963d64029aad824e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/93/be2278f2f252dfee19e5c8963d64029aad824e -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/96/d517900d0c315e239aa0ff427c1e3a2e61f5db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/96/d517900d0c315e239aa0ff427c1e3a2e61f5db -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/98/0dfdb4c43873e9e145932ee19212362ac8a8ae: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/98/0dfdb4c43873e9e145932ee19212362ac8a8ae -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/98/12f88c72ab32f80c4c9417768059aa382ab8ed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/98/12f88c72ab32f80c4c9417768059aa382ab8ed -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/9b/db6249b81ca82eb424847e24d5e1db9aded57b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/9b/db6249b81ca82eb424847e24d5e1db9aded57b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a1/606337c19fa75028ee91e37e0b8bad0a401352: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a1/606337c19fa75028ee91e37e0b8bad0a401352 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a1/cfa4504be11ff6c9ab4cff3a2a1d196eaf48a6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a1/cfa4504be11ff6c9ab4cff3a2a1d196eaf48a6 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a2/0181d11e152514ec40e3744a0ce9802fe2b1af: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a2/0181d11e152514ec40e3744a0ce9802fe2b1af -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a2/aef6262ae6f1c5d09dad8e7349c933ab80b5cc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a2/aef6262ae6f1c5d09dad8e7349c933ab80b5cc -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a3/6e29ca72a0d77d128efe026f09d06c3ff6caa9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a3/6e29ca72a0d77d128efe026f09d06c3ff6caa9 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a6/130d1489e9c72a1b8a432b46e36c6679fca21f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a6/130d1489e9c72a1b8a432b46e36c6679fca21f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a6/da3d655abad407e736daa988d4d84a85bc4e6e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a6/da3d655abad407e736daa988d4d84a85bc4e6e -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a9/dab9248ea99eee0c5147bed7ac7c72f1753779: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/a9/dab9248ea99eee0c5147bed7ac7c72f1753779 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ac/3005d1163b12e0a4890f120a42f7d55edd04e9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ac/3005d1163b12e0a4890f120a42f7d55edd04e9 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ac/9b637a24ce3da43b376a2adec008fc8c4a9178: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ac/9b637a24ce3da43b376a2adec008fc8c4a9178 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ad/2f86605c7fdd7c6ddd62201dd38007c311b84e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ad/2f86605c7fdd7c6ddd62201dd38007c311b84e -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ad/31cdb5ec215c4db2ef1263b220787c2e5c7ddf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ad/31cdb5ec215c4db2ef1263b220787c2e5c7ddf -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/af/8eb70842c856d1837691597b5c91607dfe45ee: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/af/8eb70842c856d1837691597b5c91607dfe45ee -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/b4/d62430c46c14eee75f258518d9a58375b9679b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/b4/d62430c46c14eee75f258518d9a58375b9679b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/bd/0c8bd3657a0ed496f3d306c7b38e3844c67f56: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/bd/0c8bd3657a0ed496f3d306c7b38e3844c67f56 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/bd/acf2c4e2f96255c8b53ea797e081c21397d23f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/bd/acf2c4e2f96255c8b53ea797e081c21397d23f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/be/da8e8afc48a39f4836e249e9512c125b4a7c87: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/be/da8e8afc48a39f4836e249e9512c125b4a7c87 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c1/2d2d25ba968ef018f9c1281f3b9de0cd5a68b1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c1/2d2d25ba968ef018f9c1281f3b9de0cd5a68b1 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c1/fe6dc08b0cdd9014112c3881a9ec07d2f1a85b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c1/fe6dc08b0cdd9014112c3881a9ec07d2f1a85b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c4/b01cd014912e049019f05fd701afe2d8a9c198: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c4/b01cd014912e049019f05fd701afe2d8a9c198 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c8/6f2542ca85249781b1608bcc3e72b4771ca282: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/c8/6f2542ca85249781b1608bcc3e72b4771ca282 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ca/00c3f2bf67d68401c8a0dad7aa9d23fdc6ce6b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ca/00c3f2bf67d68401c8a0dad7aa9d23fdc6ce6b -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/cb/7636c53eaf843865b31f086f10a8a86209281e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/cb/7636c53eaf843865b31f086f10a8a86209281e -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/cc/ac92691a6bdef949e50be8b529fc6b5f5379f5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/cc/ac92691a6bdef949e50be8b529fc6b5f5379f5 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/cd/b87bc2948335619f607e8f717fc963417bb149: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/cd/b87bc2948335619f607e8f717fc963417bb149 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ce/cf6aaa74d27b7557b9c99551e1e02ff53fb0e9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ce/cf6aaa74d27b7557b9c99551e1e02ff53fb0e9 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d0/073a6cfc09f4249d52e020559b4e14af9fed9a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d0/073a6cfc09f4249d52e020559b4e14af9fed9a -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d1/0d10bec2f8b1f4895e144c30004770de81a7cc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d1/0d10bec2f8b1f4895e144c30004770de81a7cc -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d3/aabb86575ea5355ba634b4dea8c6b2cd5af94f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d3/aabb86575ea5355ba634b4dea8c6b2cd5af94f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d9/c891cd172bf7eef5eae510ce272e0ec40ca0f7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/d9/c891cd172bf7eef5eae510ce272e0ec40ca0f7 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/db/9bf8c6a58cb0350505fed41d070aab82eda6ef: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/db/9bf8c6a58cb0350505fed41d070aab82eda6ef -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/dc/f75973b2a84d2cf9e493e68071dfd44532bdcc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/dc/f75973b2a84d2cf9e493e68071dfd44532bdcc -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/dd/61d1f917ee6c8728de4fd7d9883d47a2c4dc66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/dd/61d1f917ee6c8728de4fd7d9883d47a2c4dc66 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/df/54197dfca5f9e964b9101189c756f0b65aa335: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/df/54197dfca5f9e964b9101189c756f0b65aa335 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/e2/086a901a2e431222dfbe59b803c2aa8894f4b6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/e2/086a901a2e431222dfbe59b803c2aa8894f4b6 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/e3/0f908ff9bfb6568b7ac714299ce61481e45caa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/e3/0f908ff9bfb6568b7ac714299ce61481e45caa -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ec/31de6fffd6e2be2f096f60a1d9b95ce5513d4f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ec/31de6fffd6e2be2f096f60a1d9b95ce5513d4f -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ee/8a3ea83302bd57796d19193e2c04769243f45c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/ee/8a3ea83302bd57796d19193e2c04769243f45c -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/f3/18cca17dc099914354f1509baf1b19b8add0b9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/f3/18cca17dc099914354f1509baf1b19b8add0b9 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/fb/968b626e34c0c61ea1b53d98ed4341a6f2263d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/fb/968b626e34c0c61ea1b53d98ed4341a6f2263d -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/fe/3bb35e14bdf4df2f3c6ee2e79f2df6ca1016b5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/objects/fe/3bb35e14bdf4df2f3c6ee2e79f2df6ca1016b5 -------------------------------------------------------------------------------- /.sf/orgs/00D8H0000005h5UUAQ/localSourceTracking/refs/heads/main: -------------------------------------------------------------------------------- 1 | 3f48c48eb033042ce654b30309ba35a3c63c14f7 2 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "salesforce.salesforcedx-vscode", 4 | "redhat.vscode-xml", 5 | "dbaeumer.vscode-eslint", 6 | "esbenp.prettier-vscode" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch Apex Replay Debugger", 9 | "type": "apex-replay", 10 | "request": "launch", 11 | "logFile": "${command:AskForLogFileName}", 12 | "stopOnEntry": true, 13 | "trace": true 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "search.exclude": { 3 | "**/node_modules": true, 4 | "**/bower_components": true, 5 | "**/.sfdx": true 6 | } 7 | } -------------------------------------------------------------------------------- /IlluminatedCloud/flow_autotests4/OfflineSymbolTable.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexed1/FlowTestGenerator/aa67d0295ec8f3c8675cf87538b0549d731e0197/IlluminatedCloud/flow_autotests4/OfflineSymbolTable.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | See https://unofficialsf.com/?p=19096 2 | -------------------------------------------------------------------------------- /config/project-scratch-def.json: -------------------------------------------------------------------------------- 1 | { 2 | "orgName": "aedelstein company", 3 | "edition": "Developer", 4 | "features": [] 5 | } 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/AssembleInputParams.cls: -------------------------------------------------------------------------------- 1 | @TestVisible 2 | public with sharing class AssembleInputParams { 3 | private static final Integer NUMBER_OF_PARAMS = 4; 4 | 5 | @InvocableMethod 6 | public static List execute(List requestList) { 7 | System.debug('entering AssembleInputParams'); 8 | Map requestListMap = (Map) JSON.deserialize(JSON.serialize(requestList[0]), Map.class); 9 | 10 | //Create a Results object to hold the return values 11 | Results response = new Results(); 12 | List params = new List(); 13 | for (Integer i = 1; i <= NUMBER_OF_PARAMS; i++) { 14 | String paramKey = (String) requestListMap.get('param' + i + 'Key'); 15 | String paramValue = (String) requestListMap.get('param' + i + 'Value'); 16 | if ((paramKey != null && paramValue == null) || (paramKey == null && paramValue != null)) 17 | throw new InvocableActionException('You need to provide both a param1Key and a param1Value. Currently you are only providing 1 of those'); 18 | if (paramKey != null && paramValue != null) { 19 | params.add(new ContextWrapper(paramKey, paramValue)); 20 | } 21 | } 22 | 23 | response.jsonParams = JSON.serialize(params); 24 | 25 | //Wrap the Results object in a List container (an extra step added to allow this interface to also support bulkification) 26 | List responseWrapper = new List(); 27 | responseWrapper.add(response); 28 | System.debug('response is: ' + response); 29 | System.debug('responseWrapper is: ' + responseWrapper); 30 | 31 | return responseWrapper; 32 | 33 | } 34 | 35 | public class InvocableActionException extends Exception { 36 | } 37 | 38 | 39 | public class Requests { 40 | 41 | @InvocableVariable 42 | public String param1Key; 43 | 44 | @InvocableVariable 45 | public String param1Value; 46 | 47 | @InvocableVariable 48 | public String param2Key; 49 | 50 | @InvocableVariable 51 | public String param2Value; 52 | 53 | @InvocableVariable 54 | public String param3Key; 55 | 56 | @InvocableVariable 57 | public String param3Value; 58 | 59 | @InvocableVariable 60 | public String param4Key; 61 | 62 | @InvocableVariable 63 | public String param4Value; 64 | 65 | } 66 | 67 | public class Results { 68 | 69 | @InvocableVariable 70 | public String jsonParams; 71 | 72 | } 73 | 74 | public class ContextWrapper { 75 | public String name; 76 | public String value; 77 | 78 | public ContextWrapper(String name, String value) { 79 | this.name = name; 80 | this.value = value; 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /force-app/main/default/classes/AssembleInputParams.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 47.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/AssembleInputParamsTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class AssembleInputParamsTest { 3 | @isTest 4 | static void testExecute() { 5 | List requestList = new List(); 6 | AssembleInputParams.Requests request = new AssembleInputParams.Requests(); 7 | request.param1Key = 'param1Key'; 8 | request.param1Value = 'param1Value'; 9 | request.param2Key = 'param2Key'; 10 | request.param2Value = 'param2Value'; 11 | request.param3Key = 'param3Key'; 12 | request.param3Value = 'param3Value'; 13 | request.param4Key = 'param4Key'; 14 | request.param4Value = 'param4Value'; 15 | requestList.add(request); 16 | List results = AssembleInputParams.execute(requestList); 17 | String resultJSON = 18 | '[' + 19 | '{' + 20 | '"value":"param1Value",' + 21 | '"name":"param1Key"' + 22 | '},' + 23 | '{' + 24 | '"value":"param2Value",' + 25 | '"name":"param2Key"' + 26 | '},' + 27 | '{' + 28 | '"value":"param3Value",' + 29 | '"name":"param3Key"' + 30 | '},' + 31 | '{' + 32 | '"value":"param4Value",' + 33 | '"name":"param4Key"' + 34 | '}' + 35 | ']'; 36 | System.assertEquals(resultJSON, results[0].jsonParams); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /force-app/main/default/classes/AssembleInputParamsTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 52.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/CountRecordsAndFields.cls: -------------------------------------------------------------------------------- 1 | 2 | global with sharing class CountRecordsAndFields { 3 | @InvocableMethod 4 | global static List count(List requestList) { 5 | 6 | List records = requestList[0].inputCollection; 7 | String fieldName = requestList[0].fieldName; 8 | String fieldValue = requestList[0].fieldValue; 9 | 10 | //Create a Results object to hold the return values 11 | Results response = new Results(); 12 | try { 13 | for (SObject record : records) { 14 | if (!String.isBlank(fieldName) && !String.isBlank(fieldValue)) { 15 | if (record.get(fieldName) == fieldValue) { 16 | response.matchedNumber++; 17 | } 18 | } 19 | 20 | response.totalNumber++; 21 | } 22 | } catch (Exception ex) { 23 | response.errors = ex.getMessage(); 24 | } 25 | 26 | //Wrap the Results object in a List container (an extra step added to allow this interface to also support bulkification) 27 | List responseWrapper = new List(); 28 | responseWrapper.add(response); 29 | return responseWrapper; 30 | 31 | } 32 | 33 | global class Requests { 34 | @InvocableVariable(required=false) 35 | global List inputCollection; 36 | @InvocableVariable(required=false) 37 | global String fieldName; 38 | @InvocableVariable(required=false) 39 | global String fieldValue; 40 | } 41 | 42 | global class Results { 43 | public Results() { 44 | this.errors = ''; 45 | this.matchedNumber = 0; 46 | this.totalNumber = 0; 47 | } 48 | @InvocableVariable 49 | global Integer matchedNumber; 50 | @InvocableVariable 51 | global Integer totalNumber; 52 | @InvocableVariable 53 | global String errors; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /force-app/main/default/classes/CountRecordsAndFields.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/CountRecordsAndFieldsTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class CountRecordsAndFieldsTest { 3 | @isTest 4 | static void testCount() { 5 | Account testAcc = new Account(Name = 'Test Account'); 6 | insert testAcc; 7 | List requestList = new List(); 8 | CountRecordsAndFields.Requests request = new CountRecordsAndFields.Requests(); 9 | List sobjects = new List{testAcc}; 10 | request.inputCollection = sobjects; 11 | request.fieldName = 'Name'; 12 | request.fieldValue = 'Test Account'; 13 | requestList.add(request); 14 | List results = CountRecordsAndFields.count(requestList); 15 | System.assertEquals(1, results[0].matchedNumber); 16 | System.assertEquals(1, results[0].totalNumber); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /force-app/main/default/classes/CountRecordsAndFieldsTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 52.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/DeployApexClass.cls: -------------------------------------------------------------------------------- 1 | //this will take a string and turn it into an ApexClass. Use Caution. 2 | public with sharing class DeployApexClass { 3 | public static void deploy(String classText, String className, String testLevel) { 4 | usf3.MetadataService.MetadataPort service = new usf3.MetadataService.MetadataPort(); 5 | service.SessionHeader = new usf3.MetadataService.SessionHeader_element(); 6 | service.SessionHeader.sessionId = UserInfo.getSessionId(); 7 | if (String.isEmpty(testLevel)) 8 | testLevel = 'NoTestRun'; 9 | 10 | String zippedClass = generateZipfile(classText, className); 11 | usf3.MetadataService.AsyncResult deployResult= service.deploy(zippedClass, getDeployOptions()); 12 | 13 | String jobId = deployResult.id; 14 | usf3.MetadataService.DeployResult result = service.checkDeployStatus(jobId,true); 15 | System.debug('deploy status is: ' + className + ' ' + result.status + ' ' + result.stateDetail); 16 | 17 | } 18 | 19 | 20 | public static String generateZipfile(String classText, String className) { 21 | usf3.Zippex sampleZip = new usf3.Zippex(); 22 | Blob fileData = Blob.valueOf(getPackageXml(className)); 23 | sampleZip.addFile('package.xml', fileData, null); 24 | fileData = Blob.valueOf(getStandardApexClassMetadata()); 25 | sampleZip.addFile('classes/' + className + '.cls-meta.xml', fileData, null); 26 | fileData = Blob.valueOf(classText); 27 | sampleZip.addFile('classes/' + className + '.cls', fileData, null); 28 | return EncodingUtil.base64Encode(sampleZip.getZipArchive()); 29 | 30 | } 31 | public static usf3.MetadataService.DeployOptions getDeployOptions(){ 32 | 33 | usf3.MetadataService.DeployOptions lvDeployOption = new usf3.MetadataService.DeployOptions(); 34 | lvDeployOption.allowMissingFiles = false; 35 | lvDeployOption.autoUpdatePackage = true; 36 | lvDeployOption.checkOnly = false; 37 | lvDeployOption.ignoreWarnings = true; 38 | lvDeployOption.performRetrieve = false; 39 | lvDeployOption.purgeOnDelete = false; 40 | lvDeployOption.rollbackOnError = true; 41 | lvDeployOption.runTests = new String[]{}; 42 | lvDeployOption.singlePackage = true; 43 | lvDeployOption.testLevel = 'NoTestRun'; 44 | 45 | 46 | return lvDeployOption; 47 | } 48 | 49 | 50 | public static String getPackageXml(String className) 51 | { 52 | return '' + 53 | '' + 54 | '' + 55 | '' + className + '' + 56 | 'ApexClass' + 57 | '' + 58 | '48.0' + 59 | ''; 60 | } 61 | 62 | public static String getStandardApexClassMetadata() 63 | { 64 | return '' + 65 | '' + 66 | '48.0' + 67 | 'Active' + 68 | ''; 69 | } 70 | 71 | 72 | 73 | 74 | } 75 | -------------------------------------------------------------------------------- /force-app/main/default/classes/DeployApexClass.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowTestDefinition.cls: -------------------------------------------------------------------------------- 1 | public with sharing class FlowTestDefinition { 2 | 3 | @AuraEnabled 4 | public List inputValues; 5 | 6 | @AuraEnabled 7 | public List assertionExpressions; 8 | 9 | @AuraEnabled 10 | public string testName; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowTestDefinition.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowTestGenerator.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowTestGeneratorTest.cls: -------------------------------------------------------------------------------- 1 | @IsTest 2 | class FlowTestGeneratorTest { 3 | @IsTest 4 | static void flowTestMethod() { 5 | Flow_Test__c flowTest = new Flow_Test__c(Name = 'Test FLow', Flow_API_Name__c = 'TestFlow_SimpleAutolaunched'); 6 | insert flowTest; 7 | 8 | Flow_Test_Method_Assertion__c flowTestMethodAssertion = new Flow_Test_Method_Assertion__c( 9 | Name = 'TestFlowTestMethodAssertion', 10 | Flow_Test__c = flowTest.Id, 11 | Assertion_Formula__c = '##inputOutputDate == DATETIME("2021-07-13")', 12 | Error_Message__c = 'error' 13 | ); 14 | insert flowTestMethodAssertion; 15 | 16 | Flow_Test_Method_Input_Variable__c flowTestMethodInputVariable = new Flow_Test_Method_Input_Variable__c( 17 | Name = 'inputOutputDate', 18 | Flow_Test__c = flowTest.Id, 19 | Value__c = '2021-07-13', 20 | Type__c = 'date' 21 | ); 22 | insert flowTestMethodInputVariable; 23 | 24 | 25 | FlowTestGenerator.Request request = new FlowTestGenerator.Request(); 26 | request.flowTestId = flowTest.Id; 27 | 28 | FlowTestGenerator.Result result = FlowTestGenerator.generateTestClass(new List {request})[0]; 29 | System.assert(String.isNotEmpty(result.testClassText)); 30 | 31 | System.assert(result.testClassName == 'TestFlow_SimpleAutolaunched_Test'); 32 | } 33 | 34 | @isTest 35 | static void getTypedInputVariablesMapTest() { 36 | String nameSpace = ''; 37 | String flowName = 'TestFlow_SimpleAutolaunched'; 38 | Map outputVariablesToTypeMap = new Map{ 39 | 'inputOutputDate'=>'Date', 40 | 'inputOutputDateTime'=>'DateTime', 41 | 'inputOutputNumber'=>'Number', 42 | 'inputOutputString'=>'String', 43 | 'inputString'=>'String', 44 | 'outputString'=>'String' 45 | };//set of all output variables that are used in the assertions 46 | Map inputVariables = new Map{ 47 | 'inputOutputDate'=>'2021-08-03', 48 | 'inputOutputDateTime'=>'2021-08-03T14:07:00.000Z', 49 | 'inputOutputNumber'=>'2' 50 | }; //values for input variables 51 | Map typedInputVariablesMap = FlowTestGenerator.getTypedInputVariablesMap(outputVariablesToTypeMap, inputVariables); 52 | Map assertionsToErrorMap = new Map{ 53 | 'AND(##inputOutputDate == DATETIME("2021-08-03"), ##inputOutputDateTime == DATETIME("2021-08-03T14:07:00.000Z"), ##inputOutputNumber == DECIMAL("2"))'=>'error' 54 | };// map of assertion to its error message 55 | 56 | Map outputVariables = new Map(); //stores output variables and its values 57 | 58 | Flow.Interview curInterview = Flow.Interview.createInterview(namespace, flowName, typedInputVariablesMap); 59 | curInterview.start(); 60 | 61 | for (String curOutputVariable : outputVariablesToTypeMap.keySet()) { 62 | outputVariables.put(curOutputVariable, curInterview.getVariableValue(curOutputVariable)); 63 | } 64 | 65 | for (String curAssertion : assertionsToErrorMap.keySet()) { 66 | String errorMessage = assertionsToErrorMap.get(curAssertion); 67 | for (String curOutputVarName : outputVariablesToTypeMap.keySet()) { 68 | if (curAssertion.contains('##' + curOutputVarName)) { 69 | curAssertion = curAssertion.replaceAll('##' + curOutputVarName+' ', FlowTestGenerator.getFormattedValue(outputVariables.get(curOutputVarName), outputVariablesToTypeMap.get(curOutputVarName))); 70 | } 71 | } 72 | 73 | System.assertEquals(true, Boolean.valueOf(usf3.FormulaEvaluator.parseFormula(curAssertion, null)), errorMessage+ '\nActual output values: \n' + outputVariables); 74 | } 75 | 76 | System.assert(typedInputVariablesMap.get('inputOutputDate') != null); 77 | System.assert(typedInputVariablesMap.get('inputOutputDate') instanceof Datetime); 78 | } 79 | } -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowTestGeneratorTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowVariable.cls: -------------------------------------------------------------------------------- 1 | public with sharing class FlowVariable { 2 | 3 | @AuraEnabled 4 | public string ApiName; 5 | 6 | @AuraEnabled 7 | public string DataType; 8 | 9 | @AuraEnabled 10 | public string Description; 11 | 12 | @AuraEnabled 13 | public string DurableId; 14 | 15 | @AuraEnabled 16 | public string FlowVersionViewId; 17 | 18 | @AuraEnabled 19 | public Boolean IsCollection; 20 | 21 | @AuraEnabled 22 | public Boolean IsOutput; 23 | 24 | @AuraEnabled 25 | public Boolean IsInput; 26 | 27 | @AuraEnabled 28 | public string ObjectType; 29 | 30 | //used to temporarily store serialized values to be used as test inputs 31 | @AuraEnabled 32 | public string TestValue; 33 | } 34 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowVariable.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowVariableSet.cls: -------------------------------------------------------------------------------- 1 | public with sharing class FlowVariableSet { 2 | 3 | public FlowVariableSet() { 4 | variables = new List(); 5 | } 6 | 7 | @AuraEnabled 8 | public List variables; 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FlowVariableSet.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FormulaBuilderController.cls: -------------------------------------------------------------------------------- 1 | public with sharing class FormulaBuilderController { 2 | 3 | @AuraEnabled(cacheable=true) 4 | public static List getFieldList(String objectName) { 5 | List result = new List(); 6 | 7 | Schema.DescribeSObjectResult describeObject = Schema.getGlobalDescribe().get(objectName).getDescribe(); 8 | Map fields = describeObject.fields.getMap(); 9 | 10 | for(Schema.sObjectField field : fields.values()) { 11 | result.add(field.getDescribe().getName()); 12 | } 13 | 14 | return result; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FormulaBuilderController.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FormulaBuilderControllerTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class FormulaBuilderControllerTest { 3 | @IsTest 4 | static void getFieldListTest() { 5 | List result = FormulaBuilderController.getFieldList('Opportunity'); 6 | System.assertNotEquals(NULL, result, 'Result not NULL'); 7 | System.assertNotEquals(0, result.size(), 'Result size > 0'); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /force-app/main/default/classes/FormulaBuilderControllerTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFirst.cls: -------------------------------------------------------------------------------- 1 | global with sharing class GetFirst { 2 | 3 | 4 | @InvocableMethod 5 | global static List execute (List requestList) { 6 | System.debug('entering getFirst'); 7 | List inputCollection = requestList[0].inputCollection; 8 | Boolean enforceSingle = requestList[0].enforceSingleMember; 9 | 10 | //TODO if enforceSingle is set, throw an error if count of input collection is not 1 11 | SObject outputMember = inputCollection[0]; 12 | 13 | //Create a Results object to hold the return values 14 | Results response = new Results(); 15 | 16 | //add the return values to the Results object 17 | response.outputMember = outputMember; 18 | 19 | //Wrap the Results object in a List container (an extra step added to allow this interface to also support bulkification) 20 | List responseWrapper= new List(); 21 | responseWrapper.add(response); 22 | return responseWrapper; 23 | 24 | } 25 | 26 | global class Requests { 27 | @InvocableVariable(required=true) 28 | global List inputCollection; 29 | 30 | @InvocableVariable 31 | global Boolean enforceSingleMember; //not yet implemented 32 | 33 | } 34 | 35 | global class Results { 36 | 37 | @InvocableVariable 38 | global SObject outputMember; 39 | 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFirst.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFirstTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | global class GetFirstTest { 3 | 4 | @isTest 5 | static void GetFirstReturnsFirstResult() { 6 | 7 | 8 | /* Account targetMember = FixtureData.OutputRecord1(); 9 | 10 | List testRequestList = new List(); 11 | GetFirst.Requests testRequest = new GetFirst.Requests(); 12 | testRequest.inputCollection = FixtureData.InputCollection1(); 13 | testRequestList.add(testRequest); 14 | 15 | System.debug('testRequestList: ' + testRequestList); 16 | List resultList = GetFirst.execute(testRequestList); 17 | System.assertEquals(resultList[0].outputMember.name, targetMember.name, 'GetFirst names do not match'); 18 | */ 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFirstTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFlowVariables.cls: -------------------------------------------------------------------------------- 1 | public with sharing class GetFlowVariables { 2 | 3 | @InvocableMethod 4 | public static List get(List requestList) { 5 | Result response = new Result(); 6 | List responseWrapper = new List(); 7 | 8 | for (Request req : requestList) { 9 | String flowName = req.flowName; 10 | FlowDefinitionView curFlow = [SELECT DurableId, ApiName, Label FROM FlowDefinitionView WHERE ApiName = :flowName]; 11 | System.debug('curFlow: ' + curFlow); 12 | FlowVersionView[] curFlowVersion = [SELECT DurableId, VersionNumber, Label FROM FlowVersionView WHERE FlowDefinitionViewId = :curFlow.DurableId]; 13 | System.debug('curFlowVersion: ' + curFlowVersion); 14 | String versionId = curFlowVersion[0].DurableId; 15 | List curFlowVariables = [SELECT ApiName, DataType, Description,DurableId, IsCollection,IsInput,IsOutput,ObjectType FROM FlowVariableView WHERE FlowVersionViewId = :versionId]; 16 | System.debug('curFlowVariables: ' + curFlowVariables); 17 | 18 | 19 | response.flowVariables = new List(); 20 | for (FlowVariableView curVariableView : curFlowVariables) { 21 | FlowVariable curVar = new FlowVariable(); 22 | curVar.ApiName = curVariableView.ApiName; 23 | curVar.DataType = curVariableView.DataType; 24 | curVar.Description = curVariableView.Description; 25 | curVar.DurableId = curVariableView.DurableId; 26 | curVar.IsCollection = curVariableView.IsCollection; 27 | curVar.IsInput = curVariableView.IsInput; 28 | curVar.IsOutput = curVariableView.IsOutput; 29 | curVar.ObjectType = curVariableView.ObjectType; 30 | response.flowVariables.add(curVar); 31 | } 32 | 33 | responseWrapper.add(response); 34 | } 35 | return responseWrapper; 36 | 37 | 38 | } 39 | 40 | 41 | public class Request { 42 | 43 | @InvocableVariable 44 | public String flowName; 45 | public Request() { 46 | 47 | } 48 | public Request(String flowName) { 49 | this.flowName = flowName; 50 | } 51 | 52 | } 53 | 54 | public class Result { 55 | 56 | 57 | @InvocableVariable 58 | public List flowVariables; 59 | 60 | } 61 | } -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFlowVariables.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFlowVariablesTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class GetFlowVariablesTest { 3 | 4 | @isTest 5 | public static void CanGetVariables() { 6 | List requestList = new List(); 7 | GetFlowVariables.Request request = new GetFlowVariables.Request(); 8 | 9 | request.flowName = 'TestFlow_SimpleAutolaunched'; 10 | requestList.add(request); 11 | List resultList = GetFlowVariables.get(requestList); 12 | System.assertNotEquals(null, resultList); 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /force-app/main/default/classes/GetFlowVariablesTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/SObjectController2.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/SObjectController2Test.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class SObjectController2Test { 3 | 4 | static testMethod void test() { 5 | Account a1 = new Account(Name='Test1', 6 | AccountNumber='1', 7 | Website='https://trailblazer.me/id/ericsmith', 8 | Type='Type1', 9 | Description='D1'); 10 | insert a1; 11 | Account a2 = new Account(Name='Test2', 12 | AccountNumber='2', 13 | Website='https://ericsplayground.wordpress.com/blog/', 14 | Type='Type2', 15 | Description='D2'); 16 | insert a2; 17 | 18 | Account[] accts = [Select Id, Name, OwnerId from Account]; 19 | String fieldnames = 'Name,Id,OwnerId,AccountNumber,Website,Type,Description,IsDeleted,CreatedDate,AnnualRevenue,NumberOfEmployees,Fax,LastActivityDate'; 20 | String testResponse = SObjectController2.getReturnResults(accts, fieldnames); 21 | System.assert(testResponse.contains('"noEditFieldList":["Type","Description"],"lookupFieldList":["OwnerId"]')); 22 | 23 | Account[] empty = [Select Id, Name, OwnerId from Account Where Name='NotInAccounts']; 24 | String testEmpty = SObjectController2.getReturnResults(empty, fieldnames); 25 | System.assert(testEmpty.contains('"objectName":"EmptyCollection"')); 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /force-app/main/default/classes/SObjectController2Test.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/Test_Autolaunched_Flow_Test.cls: -------------------------------------------------------------------------------- 1 | @IsTest 2 | class Test_Autolaunched_Flow_Test { 3 | @IsTest 4 | static void TestAutoflowwithrecords() { 5 | String nameSpace = ''; 6 | String flowName = 'Test_Autolaunched_Flow'; 7 | Map outputVariablesToTypeMap = new Map{ 8 | 'inputOutputDate'=>'Date', 9 | 'inputOutputDateTime'=>'DateTime', 10 | 'inputOutputNumber'=>'Number', 11 | 'inputOutputString'=>'String', 12 | 'inputString'=>'String', 13 | 'outputString'=>'String' 14 | };//set of all output variables that are used in the assertions 15 | Map inputVariables = new Map{ 16 | 'inputOutputDate'=>'2020-07-02', 17 | 'inputOutputDateTime'=>'2020-07-20T18:00:00.000Z', 18 | 'inputOutputNumber'=>'1', 19 | 'inputOutputString'=>'asd' 20 | }; //values for input variables 21 | Map typedInputVariablesMap = FlowTestGenerator.getTypedInputVariablesMap(outputVariablesToTypeMap, inputVariables); 22 | Map assertionsToErrorMap = new Map{ 23 | 'AND(##inputOutputNumber == DECIMAL("100"), ##inputOutputNumber > DECIMAL("99"), ##inputOutputNumber < DECIMAL("101"), ##inputOutputDate > DATETIME("2020-07-01"), ##inputOutputDate < DATETIME("2020-07-10"), ##inputOutputDate == DATETIME("2020-07-09"), ##inputOutputDateTime == DATETIME("2020-07-20T18:00:00.000Z"), ##inputOutputDateTime > DATETIME("2020-07-20T17:45:00.000Z"), ##inputOutputDateTime < DATETIME("2020-07-20T18:15:00.000Z"), ##inputOutputString == TEXT("Test Output String 3"))'=>'Output Opportunity Values are not correct' 24 | };// map of assertion to its error message 25 | 26 | Map outputVariables = new Map(); //stores output variables and its values 27 | 28 | Flow.Interview curInterview = Flow.Interview.createInterview(namespace, flowName, typedInputVariablesMap); 29 | curInterview.start(); 30 | 31 | for (String curOutputVariable : outputVariablesToTypeMap.keySet()) { 32 | outputVariables.put(curOutputVariable, curInterview.getVariableValue(curOutputVariable)); 33 | } 34 | 35 | for (String curAssertion : assertionsToErrorMap.keySet()) { 36 | String errorMessage = assertionsToErrorMap.get(curAssertion); 37 | for (String curOutputVarName : outputVariablesToTypeMap.keySet()) { 38 | if (curAssertion.contains('##' + curOutputVarName)) { 39 | curAssertion = curAssertion.replaceAll('##' + curOutputVarName+' ', FlowTestGenerator.getFormattedValue(outputVariables.get(curOutputVarName), outputVariablesToTypeMap.get(curOutputVarName))); 40 | } 41 | } 42 | 43 | System.assertEquals(true, Boolean.valueOf(usf3.FormulaEvaluator.parseFormula(curAssertion, null)), errorMessage+ '\nActual output values: \n' + outputVariables); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /force-app/main/default/classes/Test_Autolaunched_Flow_Test.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateField.cls: -------------------------------------------------------------------------------- 1 | public with sharing class UpdateField { 2 | 3 | @InvocableMethod(label='Update Field' configurationEditor='c:updateFieldCPE') 4 | public static List execute (List requests) { 5 | String objectId = requests[0].objectId; 6 | String fieldName = requests[0].fieldName; 7 | String formula = requests[0].formula; 8 | 9 | System.debug('requests is' + requests); 10 | List contextWrappers = new List(); 11 | contextWrappers.add(new ContextWrapper('$Record', objectId)); 12 | 13 | String fieldValue = usf3.FormulaEvaluator.parseFormula( formula, JSON.serialize(contextWrappers)); 14 | System.debug(fieldValue); 15 | String objectAPIName; 16 | String keyPrefix = objectId.substring(0,3); 17 | 18 | for (Schema.SObjectType obj : Schema.getGlobalDescribe().Values()){ 19 | String prefix = obj.getDescribe().getKeyPrefix(); 20 | if (prefix == keyPrefix && prefix.indexOf(keyPrefix) != -1){ 21 | objectAPIName = obj.getDescribe().getName(); 22 | break; 23 | } 24 | } 25 | 26 | Schema.DescribeSObjectResult describeObject = Schema.getGlobalDescribe().get(objectAPIName).getDescribe(); 27 | Map fields = describeObject.fields.getMap(); 28 | String fieldType = String.valueOf(fields.get( fieldName).getDescribe().type); 29 | 30 | sObject currentObject = Schema.getGlobalDescribe().get(objectAPIName).newSObject(); 31 | currentObject.put('Id', objectId); 32 | 33 | if (fieldType == 'BOOLEAN') { 34 | currentObject.put( fieldName, Boolean.valueOf(fieldValue)); 35 | } else if (fieldType == 'CURRENCY' || fieldType == 'PERCENT' || fieldType == 'DOUBLE') { 36 | currentObject.put( fieldName, Decimal.valueOf(fieldValue)); 37 | } else if (fieldType == 'DATE') { 38 | currentObject.put( fieldName, Date.valueOf(fieldValue)); 39 | } else if (fieldType == 'DATETIME') { 40 | currentObject.put( fieldName, Datetime.valueOf(fieldValue)); 41 | } else if (fieldType == 'INTEGER') { 42 | currentObject.put( fieldName, Integer.valueOf(fieldValue)); 43 | } else { 44 | currentObject.put( fieldName, fieldValue); 45 | } 46 | 47 | Database.SaveResult updateResult = Database.update(currentObject, true); 48 | 49 | /* if (!result.isSuccess()) { 50 | throw new UpdateFieldActionException(result.getErrors()[0].getMessage()); 51 | } */ 52 | 53 | //Create a Results object to hold the return values 54 | Response response = new Response(); 55 | 56 | //add the return values to the Results object 57 | response.isSuccess = updateResult.isSuccess(); 58 | response.errors = packErrorString(updateResult); 59 | 60 | //Wrap the Results object in a List container (an extra step added to allow this interface to also support bulkification) 61 | List responseWrapper= new List(); 62 | responseWrapper.add(response); 63 | return responseWrapper; 64 | 65 | 66 | 67 | 68 | } 69 | 70 | public static String packErrorString(Database.SaveResult saveResult) { 71 | String errorString = ''; 72 | for(Database.Error err : saveResult.getErrors()) { 73 | errorString = errorString + (' The following error has occurred.'); 74 | errorString = errorString + (' ' + err.getStatusCode() + ': ' + err.getMessage()); 75 | } 76 | return errorString; 77 | 78 | } 79 | 80 | public class Request { 81 | @InvocableVariable(required=true) 82 | public String objectId; 83 | 84 | @InvocableVariable(required=true) 85 | public String fieldName; 86 | 87 | @InvocableVariable(required=true) 88 | public String formula; 89 | } 90 | 91 | public class Response { 92 | @InvocableVariable 93 | public Boolean isSuccess; 94 | 95 | @InvocableVariable 96 | public String errors; 97 | 98 | 99 | } 100 | 101 | public class ContextWrapper { 102 | public String name; 103 | public String value; 104 | 105 | public ContextWrapper(String name, String value) { 106 | this.name = name; 107 | this.value = value; 108 | } 109 | } 110 | 111 | class UpdateFieldActionException extends Exception {} 112 | } 113 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateField.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateFieldAction.cls: -------------------------------------------------------------------------------- 1 | public with sharing class UpdateFieldAction { 2 | @InvocableMethod(label='Update Field') 3 | public static List updateField(List requests) { 4 | String objectId = requests[0].objectId; 5 | String fieldName = requests[0].fieldName; 6 | String formula = requests[0].formula; 7 | 8 | System.debug('requests is' + requests); 9 | List contextWrapers = new List(); 10 | contextWrapers.add(new ContextWraper('$Record', objectId)); 11 | 12 | String fieldValue = usf3.FormulaEvaluator.parseFormula( formula, JSON.serialize(contextWrapers)); 13 | System.debug(fieldValue); 14 | String objectAPIName; 15 | String keyPrefix = objectId.substring(0,3); 16 | 17 | for (Schema.SObjectType obj : Schema.getGlobalDescribe().Values()){ 18 | String prefix = obj.getDescribe().getKeyPrefix(); 19 | if (prefix == keyPrefix && prefix.indexOf(keyPrefix) != -1){ 20 | objectAPIName = obj.getDescribe().getName(); 21 | break; 22 | } 23 | } 24 | 25 | Schema.DescribeSObjectResult describeObject = Schema.getGlobalDescribe().get(objectAPIName).getDescribe(); 26 | Map fields = describeObject.fields.getMap(); 27 | String fieldType = String.valueOf(fields.get( fieldName).getDescribe().type); 28 | 29 | sObject currentObject = Schema.getGlobalDescribe().get(objectAPIName).newSObject(); 30 | currentObject.put('Id', objectId); 31 | 32 | if (fieldType == 'BOOLEAN') { 33 | currentObject.put( fieldName, Boolean.valueOf(fieldValue)); 34 | } else if (fieldType == 'CURRENCY' || fieldType == 'PERCENT' || fieldType == 'DOUBLE') { 35 | currentObject.put( fieldName, Decimal.valueOf(fieldValue)); 36 | } else if (fieldType == 'DATE') { 37 | currentObject.put( fieldName, Date.valueOf(fieldValue)); 38 | } else if (fieldType == 'DATETIME') { 39 | currentObject.put( fieldName, Datetime.valueOf(fieldValue)); 40 | } else if (fieldType == 'INTEGER') { 41 | currentObject.put( fieldName, Integer.valueOf(fieldValue)); 42 | } else { 43 | currentObject.put( fieldName, fieldValue); 44 | } 45 | 46 | Database.SaveResult updateResult = Database.update(currentObject, true); 47 | 48 | /* if (!result.isSuccess()) { 49 | throw new UpdateFieldActionException(result.getErrors()[0].getMessage()); 50 | } */ 51 | 52 | //Create a Results object to hold the return values 53 | Response response = new Response(); 54 | 55 | //add the return values to the Results object 56 | response.isSuccess = updateResult.isSuccess(); 57 | response.errors = packErrorString(updateResult); 58 | 59 | //Wrap the Results object in a List container (an extra step added to allow this interface to also support bulkification) 60 | List responseWrapper= new List(); 61 | responseWrapper.add(response); 62 | return responseWrapper; 63 | 64 | 65 | 66 | 67 | } 68 | 69 | public static String packErrorString(Database.SaveResult saveResult) { 70 | String errorString = ''; 71 | for(Database.Error err : saveResult.getErrors()) { 72 | errorString = errorString + (' The following error has occurred.'); 73 | errorString = errorString + (' ' + err.getStatusCode() + ': ' + err.getMessage()); 74 | } 75 | return errorString; 76 | 77 | } 78 | 79 | public class Request { 80 | @InvocableVariable(required=true) 81 | public String objectId; 82 | 83 | @InvocableVariable(required=true) 84 | public String fieldName; 85 | 86 | @InvocableVariable(required=true) 87 | public String formula; 88 | } 89 | 90 | public class Response { 91 | @InvocableVariable 92 | public Boolean isSuccess; 93 | 94 | @InvocableVariable 95 | public String errors; 96 | 97 | 98 | } 99 | 100 | public class ContextWraper { 101 | public String name; 102 | public String value; 103 | 104 | public ContextWraper(String name, String value) { 105 | this.name = name; 106 | this.value = value; 107 | } 108 | } 109 | 110 | class UpdateFieldActionException extends Exception {} 111 | } 112 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateFieldAction.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateFieldActionTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class UpdateFieldActionTest { 3 | @isTest 4 | static void UpdateFieldActionRequestTest() { 5 | Opportunity opp = new Opportunity(); 6 | opp.Name = 'Test Opportunity'; 7 | opp.Amount = 15000.05; 8 | opp.CloseDate = Date.today().addDays(-30); 9 | opp.StageName = 'Prospecting'; 10 | opp.IsPrivate = false; 11 | 12 | insert opp; 13 | 14 | UpdateFieldAction.Request request = new UpdateFieldAction.Request(); 15 | request.objectId = opp.Id; 16 | request.fieldName = 'Amount'; 17 | request.formula = '$Record.Amount + 200'; 18 | UpdateFieldAction.updateField(new List{request}); 19 | 20 | System.assertEquals(15200.05, [SELECT Amount FROM Opportunity WHERE Id =: opp.Id LIMIT 1].Amount, 'Update decimal field'); 21 | 22 | request.fieldName = 'IsPrivate'; 23 | request.formula = '15 > 10'; 24 | UpdateFieldAction.updateField(new List{request}); 25 | 26 | System.assertEquals(true, [SELECT IsPrivate FROM Opportunity WHERE Id =: opp.Id LIMIT 1].IsPrivate, 'Update boolean field'); 27 | 28 | request.fieldName = 'CloseDate'; 29 | request.formula = '$TODAY'; 30 | UpdateFieldAction.updateField(new List{request}); 31 | 32 | System.assertEquals(System.today(), [SELECT CloseDate FROM Opportunity WHERE Id =: opp.Id LIMIT 1].CloseDate, 'Update date field'); 33 | 34 | request.fieldName = 'Name'; 35 | request.formula = '$Record.Name + "1"'; 36 | UpdateFieldAction.updateField(new List{request}); 37 | 38 | System.assertEquals('Test Opportunity1', [SELECT Name FROM Opportunity WHERE Id =: opp.Id LIMIT 1].Name, 'Update string field'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateFieldActionTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateFieldTest.cls: -------------------------------------------------------------------------------- 1 | @isTest 2 | public with sharing class UpdateFieldTest { 3 | @isTest 4 | static void UpdateFieldRequestTest() { 5 | Opportunity opp = new Opportunity(); 6 | opp.Name = 'Test Opportunity'; 7 | opp.Amount = 15000.05; 8 | opp.CloseDate = Date.today().addDays(-30); 9 | opp.StageName = 'Prospecting'; 10 | opp.IsPrivate = false; 11 | 12 | insert opp; 13 | 14 | UpdateField.Request request = new UpdateField.Request(); 15 | request.objectId = opp.Id; 16 | request.fieldName = 'Amount'; 17 | request.formula = '$Record.Amount + 200'; 18 | UpdateField.execute(new List{request}); 19 | 20 | System.assertEquals(15200.05, [SELECT Amount FROM Opportunity WHERE Id =: opp.Id LIMIT 1].Amount, 'Update decimal field'); 21 | 22 | request.fieldName = 'IsPrivate'; 23 | request.formula = '15 > 10'; 24 | UpdateField.execute(new List{request}); 25 | 26 | System.assertEquals(true, [SELECT IsPrivate FROM Opportunity WHERE Id =: opp.Id LIMIT 1].IsPrivate, 'Update boolean field'); 27 | 28 | request.fieldName = 'CloseDate'; 29 | request.formula = '$TODAY'; 30 | UpdateField.execute(new List{request}); 31 | 32 | System.assertEquals(System.today(), [SELECT CloseDate FROM Opportunity WHERE Id =: opp.Id LIMIT 1].CloseDate, 'Update date field'); 33 | 34 | request.fieldName = 'Name'; 35 | request.formula = '$Record.Name + "1"'; 36 | UpdateField.execute(new List{request}); 37 | 38 | System.assertEquals('Test Opportunity1', [SELECT Name FROM Opportunity WHERE Id =: opp.Id LIMIT 1].Name, 'Update string field'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /force-app/main/default/classes/UpdateFieldTest.cls-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | Active 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/flows/TestFlow_SimpleAutolaunched.flow-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dummy_Element 5 | 6 | 305 7 | 201 8 | 9 | outputString 10 | Assign 11 | 12 | inputString 13 | 14 | 15 | 16 | TestFlow_SimpleAutolaunched {!$Flow.CurrentDateTime} 17 | 18 | 19 | BuilderType 20 | 21 | LightningFlowBuilder 22 | 23 | 24 | 25 | OriginBuilderType 26 | 27 | LightningFlowBuilder 28 | 29 | 30 | AutoLaunchedFlow 31 | 32 | 50 33 | 50 34 | 35 | Dummy_Element 36 | 37 | 38 | Draft 39 | 40 | inputOutputDate 41 | Date 42 | false 43 | true 44 | true 45 | 46 | 47 | inputOutputDateTime 48 | DateTime 49 | false 50 | true 51 | true 52 | 53 | 54 | inputOutputNumber 55 | Number 56 | false 57 | true 58 | true 59 | 2 60 | 61 | 62 | inputOutputString 63 | String 64 | false 65 | true 66 | true 67 | 68 | 69 | inputString 70 | String 71 | false 72 | true 73 | false 74 | 75 | 76 | outputString 77 | String 78 | false 79 | false 80 | true 81 | 82 | 83 | -------------------------------------------------------------------------------- /force-app/main/default/flows/Test_Autolaunched_Flow.flow-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Assign_Output_Values 5 | 6 | 237 7 | 220 8 | 9 | inputOutputDate 10 | Assign 11 | 12 | 2020-07-09 13 | 14 | 15 | 16 | inputOutputNumber 17 | Assign 18 | 19 | 100.0 20 | 21 | 22 | 23 | inputOutputString 24 | Assign 25 | 26 | Test Output String 3 27 | 28 | 29 | 30 | Test Autolaunched Flow {!$Flow.CurrentDateTime} 31 | 32 | 33 | BuilderType 34 | 35 | LightningFlowBuilder 36 | 37 | 38 | 39 | OriginBuilderType 40 | 41 | LightningFlowBuilder 42 | 43 | 44 | AutoLaunchedFlow 45 | 46 | Get_Opportunity 47 | 48 | 558 49 | 93 50 | false 51 | Opportunity 52 | 53 | inputOutputNumber 54 | Amount 55 | 56 | 57 | inputOutputDate 58 | CloseDate 59 | 60 | 61 | inputOutputDateTime 62 | CreatedDate 63 | 64 | 65 | inputOutputString 66 | Name 67 | 68 | 69 | 70 | 50 71 | 50 72 | 73 | Assign_Output_Values 74 | 75 | 76 | Draft 77 | 78 | inputOutputDate 79 | Date 80 | false 81 | true 82 | true 83 | 84 | 85 | inputOutputDateTime 86 | DateTime 87 | false 88 | true 89 | true 90 | 91 | 92 | inputOutputNumber 93 | Number 94 | false 95 | true 96 | true 97 | 2 98 | 99 | 100 | inputOutputString 101 | String 102 | false 103 | true 104 | true 105 | 106 | 107 | inputString 108 | String 109 | false 110 | true 111 | false 112 | 113 | 114 | outputString 115 | String 116 | false 117 | false 118 | true 119 | 120 | 121 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@salesforce/eslint-config-lwc/recommended"] 3 | } 4 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/buttonUtils/buttonUtils.js: -------------------------------------------------------------------------------- 1 | export { 2 | generateCapabilityColumns, 3 | splitValues 4 | }; 5 | 6 | const generateCapabilityColumns = (labels) => { 7 | let labelsArray = labels.replace(/ /g, '').split(','); 8 | return labelsArray.map(curLabel => { 9 | return getColumnDescriptor(curLabel); 10 | }); 11 | }; 12 | 13 | const getColumnDescriptor = (curButtonLabel) => { 14 | return { 15 | type: 'button', 16 | label: curButtonLabel, 17 | typeAttributes: { 18 | label: curButtonLabel, 19 | name: curButtonLabel, //this is used to determine an apex method to call 20 | variant: 'neutral', 21 | disabled: {fieldName: curButtonLabel.replace(/ /g, '') + 'buttonDisabled'} 22 | }, 23 | initialWidth: 120 //TODO: Calculate based on content 24 | } 25 | }; 26 | 27 | const splitValues = (originalString) => { 28 | if (originalString) { 29 | return originalString.replace(/ /g, '').split(','); 30 | } else { 31 | return []; 32 | } 33 | }; 34 | 35 | 36 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/buttonUtils/buttonUtils.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | false 5 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/datatableV2/datatableV2.html: -------------------------------------------------------------------------------- 1 | 85 | 86 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/datatableV2/datatableV2.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | datatableV2 4 | This component allows the user to configure and display a datatable in a Flow screen. 5 | 49.0 6 | true 7 | 8 | lightning__FlowScreen 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 36 | 39 | 42 | 44 | 46 | 48 | 50 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 61 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowPickerFSC/flowPickerFSC.html: -------------------------------------------------------------------------------- 1 | 18 | 30 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowPickerFSC/flowPickerFSC.js: -------------------------------------------------------------------------------- 1 | import {LightningElement, api, track, wire} from 'lwc'; 2 | import getFlowNamesApex from '@salesforce/apex/usf3.FlowListController.getFlowNamesApex'; 3 | import {FlowAttributeChangeEvent} from 'lightning/flowSupport'; 4 | 5 | export default class flowPickerFSC extends LightningElement { 6 | @api label; 7 | @api selectedFlowApiName; 8 | @api showActiveFlowsOnly = false; 9 | @api searchString; 10 | @api required; 11 | @api showWhichFlowTypes = 'Flow,AutolaunchedFlow'; 12 | @api placeholder = '- Select a Flow -'; 13 | @api componentWidth = '12'; 14 | @track flowDefinitions; 15 | 16 | @wire(getFlowNamesApex, {filtersString: '$filters'}) 17 | _getFlowNamesApex({error, data}) { 18 | if (error) { 19 | console.log(error.body.message); 20 | } else if (data) { 21 | this.flowDefinitions = data; 22 | } 23 | } 24 | 25 | // Set the width of the component as a # out of 12 26 | // 12 = 100% width, 6 = 50% width, 3 = 25%width, etc 27 | get comboboxWidth() { 28 | return 'slds-size_' + this.componentWidth + '-of-12 slds-form-element'; 29 | } 30 | 31 | get filters() { 32 | let filters = new Object(); 33 | 34 | if (this.showWhichFlowTypes) { 35 | filters['ProcessType'] = this.splitValues(this.showWhichFlowTypes); 36 | } 37 | if (this.showActiveFlowsOnly) { 38 | filters['!ActiveVersionId'] = ['null']; 39 | } 40 | // Add filter for Search String 41 | if (this.searchString) { 42 | filters['Label'] = ["\'%"+this.searchString+"%\'"]; 43 | } 44 | return JSON.stringify(filters); 45 | } 46 | 47 | get options() { 48 | if (this.flowDefinitions) { 49 | return this.flowDefinitions.map(curFD => { 50 | return { 51 | value: curFD.ApiName, 52 | label: curFD.Label 53 | } 54 | }); 55 | } else { 56 | return []; 57 | } 58 | } 59 | 60 | handleChange(event) { 61 | this.selectedFlowApiName = event.detail.value; 62 | const attributeChangeEvent = new FlowAttributeChangeEvent('selectedFlowApiName', this.selectedFlowApiName); 63 | this.dispatchEvent(attributeChangeEvent); 64 | } 65 | 66 | // This is added to make the selected Flow API Name available to a calling Aura component 67 | @api 68 | flowApiName() { 69 | return this.selectedFlowApiName; 70 | } 71 | 72 | @api 73 | validate() { 74 | if (this.required && !this.selectedFlowApiName) { 75 | return { 76 | isValid: false, 77 | errorMessage: 'Complete this field.' 78 | }; 79 | } else { 80 | return {isValid: true}; 81 | } 82 | } 83 | 84 | splitValues(originalString) { 85 | if (originalString) { 86 | return originalString.replace(/ /g, '').split(','); 87 | } else { 88 | return []; 89 | } 90 | }; 91 | 92 | } 93 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowPickerFSC/flowPickerFSC.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 47.0 4 | Flow Picker FSC 5 | true 6 | Flow Picker FSC 7 | 8 | lightning__FlowScreen 9 | lightning__RecordPage 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestGeneratorUtils/flowTestGeneratorUtils.js: -------------------------------------------------------------------------------- 1 | export { 2 | settings 3 | }; 4 | 5 | const settings = { 6 | attributeParamName: 'Name', 7 | attributeParamValue: 'Value__c', 8 | inputTypeText: 'text', 9 | outputTypeString: 'String', 10 | inputTypeMap: {"String": 'text', "Number": "number", "DateTime": 'datetime', "Date": 'date'}, 11 | outputTypeMap: { 12 | "number": "DOUBLE", 13 | "datetime": "DATETIME", 14 | "date": "DATETIME", 15 | "text": "STRING", 16 | }, 17 | stepSpecifyTestInputs: 'inputs', 18 | stepSpecifyTestOutputs: 'outputs', 19 | stepConfirmGenerateTest: 'confirm' 20 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestGeneratorUtils/flowTestGeneratorUtils.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Flow Test Generator Utils 5 | true 6 | Flow Test Generator Utils 7 | 8 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetAssertions/flowTestSetAssertions.css: -------------------------------------------------------------------------------- 1 | .border-top-2px { 2 | border-top: solid 2px; 3 | width: 100%; 4 | border-color: var(--lwc-colorBorder); 5 | } 6 | 7 | .text-align-end { 8 | text-align: end; 9 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetAssertions/flowTestSetAssertions.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetAssertions/flowTestSetAssertions.js: -------------------------------------------------------------------------------- 1 | import {LightningElement, api, track} from 'lwc'; 2 | import {settings} from 'c/flowTestGeneratorUtils'; 3 | import { FlowAttributeChangeEvent, FlowNavigationNextEvent, FlowNavigationBackEvent, FlowNavigationFinishEvent } from 'lightning/flowSupport'; 4 | 5 | export default class FlowTestSetAssertions extends LightningElement { 6 | @api flowTestId; 7 | _outputOptions = []; 8 | _flowVariables = []; 9 | @track _testAssertions = []; 10 | lastExpressionIndex = 0; 11 | 12 | @api get flowVariables() { 13 | return this._flowVariables; 14 | } 15 | 16 | set flowVariables(value) { 17 | this._flowVariables = value; 18 | this.setVariablesOptions(); 19 | } 20 | 21 | @api get testAssertions() { 22 | let resultOptions = []; 23 | this._testAssertions.forEach(curLine => { 24 | resultOptions.push(this.convertJSToSObject(curLine)); 25 | }); 26 | return resultOptions; 27 | } 28 | 29 | set testAssertions(value) { 30 | this._testAssertions = []; 31 | if (value && value.length) { 32 | value.forEach(curValue => { 33 | this._testAssertions.push(this.convertSObjectToJS(curValue)); 34 | }); 35 | } 36 | } 37 | 38 | 39 | get isNextDisabled() { 40 | let isDisabled = false; 41 | this.testAssertions.forEach( 42 | element => { 43 | if(!element.Assertion_Formula__c){ 44 | isDisabled = true; 45 | } 46 | } 47 | ); 48 | 49 | return isDisabled; 50 | } 51 | 52 | dispatchFlowValueChangedEvent() { 53 | const valueChangeEvent = new FlowAttributeChangeEvent('testAssertions', this.testAssertions); 54 | // this.dispatchEvent(valueChangeEvent); 55 | } 56 | 57 | convertJSToSObject(curValue) { 58 | let newValue = JSON.parse(JSON.stringify(curValue)); 59 | delete newValue.uid; 60 | return newValue; 61 | } 62 | 63 | convertSObjectToJS(curValue) { 64 | return this.generateNewTestAssertion(curValue); 65 | } 66 | 67 | generateNewTestAssertion(curValue) { 68 | if (curValue) { 69 | return {...curValue, ...{uid: this.lastExpressionIndex++}} 70 | } 71 | return { 72 | uid: this.lastExpressionIndex++, 73 | Name: null, 74 | Assertion_Formula__c: null, 75 | Error_Message__c: null, 76 | Id: null, 77 | Flow_Test__c: this.flowTestId 78 | }; 79 | } 80 | innerIndex = 0; 81 | labels = { 82 | inputVariablesLabel: "Specify Test Inputs", 83 | outputVariablesLabel: "Specify Test Outputs", 84 | addInputVariableButtonLabel: "Add Input Variable", 85 | addExpressionButtonLabel: "Add Expression", 86 | addAssertionButtonLabel: "Add Assertion", 87 | assertionNameInputLabel: "Assertion Name", 88 | assertionErrorMessageLabel: "Error Message", 89 | generateTestClassLabel: "Generate Test Class", 90 | testMethodNameLabel: "Test Method Name", 91 | setOutputVariablesButtonLabel: "Set Output Variables", 92 | confirmAndGenerateButtonLabel: "Confirm and Generate", 93 | nextLabel: "Next", 94 | previousLabel: "Previous" 95 | } 96 | 97 | setVariablesOptions() { 98 | this._inputOptions = []; 99 | if (this._flowVariables && this._flowVariables.length) { 100 | this._flowVariables.forEach(curVariable => { 101 | if (!curVariable.IsCollection) { 102 | if (curVariable.IsOutput) { 103 | let curType = settings.outputTypeMap[curVariable.DataType.toLowerCase()]; 104 | this._outputOptions.push({ 105 | label: curVariable.ApiName, 106 | value: ('##' + curVariable.ApiName), 107 | dataType: curType ? curType : settings.outputTypeString, 108 | renderType: curVariable.DataType.toLowerCase() 109 | }) 110 | } 111 | } 112 | }) 113 | } 114 | } 115 | 116 | handleRemoveAssertion(event) { 117 | this._testAssertions = this._testAssertions.filter(curLine => curLine.uid.toString() !== event.currentTarget.dataset.uid); 118 | this.dispatchFlowValueChangedEvent(); 119 | } 120 | 121 | @api getTestMethodData() { 122 | let assertionsMap = {}; 123 | let inputVariablesMap = {}; 124 | 125 | this._testAssertions.forEach(curAssertion => { 126 | assertionsMap[curAssertion.Assertion_Formula__c] = curAssertion.Error_Message__c; 127 | }); 128 | let outputVariablesToTypeMap = {}; 129 | this._outputOptions.forEach(curOutputVariable => { 130 | outputVariablesToTypeMap[curOutputVariable.value.replace('##', '')] = curOutputVariable.dataType; 131 | }); 132 | 133 | return { 134 | testMethodName: this.flowTestId, 135 | inputVariablesMap: inputVariablesMap, 136 | outputVariablesToTypeMap: outputVariablesToTypeMap, 137 | assertionsMap: assertionsMap 138 | }; 139 | } 140 | 141 | connectedCallback() { 142 | if (!this._testAssertions || !this._testAssertions.length) { 143 | this.handleAddTestAssertion(); 144 | } 145 | } 146 | 147 | handleExpressionChanged(event) { 148 | let changedAssertion = this._testAssertions.find(curAssertion => curAssertion.uid === event.detail.name); 149 | if (changedAssertion) { 150 | changedAssertion.Assertion_Formula__c = event.detail.value; 151 | this.dispatchFlowValueChangedEvent(); 152 | } 153 | } 154 | 155 | handleAddTestAssertion(event) { 156 | this._testAssertions.push(this.generateNewTestAssertion()); 157 | } 158 | 159 | get testAssertions() { 160 | let index = 1; 161 | return this._testAssertions.map(curAssertion => { 162 | return { 163 | ...curAssertion, ...{index: index++} 164 | } 165 | } 166 | ) 167 | } 168 | 169 | handleAssertionVariableChange(event) { 170 | let foundAssertion = this._testAssertions.find(curLine => curLine.uid.toString() === event.currentTarget.dataset.uid); 171 | if (foundAssertion) { 172 | foundAssertion[event.currentTarget.name] = event.target.value; 173 | this.dispatchFlowValueChangedEvent(); 174 | } 175 | 176 | } 177 | 178 | @api 179 | validate() { 180 | let validity = { 181 | isValid: true 182 | }; 183 | let inputsToVerify = this.template.querySelectorAll('c-fsc_expression-builder'); 184 | if (inputsToVerify && inputsToVerify.length) { 185 | inputsToVerify.forEach(curInput => { 186 | let reportedValidity = curInput.validate(); 187 | if (!reportedValidity || !reportedValidity.isValid) { 188 | validity = reportedValidity; 189 | return reportedValidity; 190 | } 191 | }) 192 | } 193 | return validity; 194 | } 195 | 196 | nextFlow() { 197 | this.dispatchEvent(new FlowNavigationNextEvent()); 198 | } 199 | 200 | previousFlow() { 201 | this.dispatchEvent(new FlowNavigationBackEvent()); 202 | } 203 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetAssertions/flowTestSetAssertions.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Flow Test Set Assertions 5 | true 6 | Flow Test Set Assertions 7 | 8 | lightning__FlowScreen 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetInputVariables/flowTestSetInputVariables.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetInputVariables/flowTestSetInputVariables.js: -------------------------------------------------------------------------------- 1 | import {LightningElement, track, api} from 'lwc'; 2 | import {settings} from 'c/flowTestGeneratorUtils'; 3 | import {FlowAttributeChangeEvent} from 'lightning/flowSupport'; 4 | 5 | export default class FlowTestSetInputVariables extends LightningElement { 6 | @api flowTestId; 7 | @track _expressionLines = []; 8 | _flowVariables = []; 9 | _inputOptions = []; 10 | // _outputOptions = []; 11 | isLoading; 12 | lastExpressionIndex = 0; 13 | 14 | labels = { 15 | addButtonLabel: 'Add' 16 | } 17 | 18 | @api get flowVariables() { 19 | return this._flowVariables; 20 | } 21 | 22 | set flowVariables(value) { 23 | this._flowVariables = value; 24 | this.setVariablesOptions(); 25 | } 26 | 27 | @api get expressionLines() { 28 | return this._expressionLines; 29 | } 30 | 31 | set expressionLines(value) { 32 | this._expressionLines = value; 33 | } 34 | 35 | @api get inputOptionsValues() { 36 | let resultOptions = []; 37 | this._expressionLines.forEach(curLine => { 38 | // if (curLine.paramValue || curLine.paramValue) { 39 | resultOptions.push(this.convertJSToSObject(curLine)); 40 | // } 41 | }); 42 | return resultOptions; 43 | } 44 | 45 | set inputOptionsValues(value) { 46 | this._expressionLines = []; 47 | if (value && value.length) { 48 | value.forEach(curValue => { 49 | this._expressionLines.push(this.convertSObjectToJS(curValue)); 50 | }); 51 | } 52 | } 53 | 54 | generateNewExpression(curValue) { 55 | if (curValue) { 56 | return {...curValue, ...{uid: this.lastExpressionIndex++}} 57 | } 58 | return { 59 | uid: this.lastExpressionIndex++, 60 | Name: '', 61 | Value__c: '', 62 | Type__c: null, 63 | Id: null, 64 | Flow_Test__c: this.flowTestId 65 | }; 66 | } 67 | 68 | convertJSToSObject(curValue) { 69 | let newValue = JSON.parse(JSON.stringify(curValue)); 70 | delete newValue.uid; 71 | return newValue; 72 | } 73 | 74 | convertSObjectToJS(curValue) { 75 | return this.generateNewExpression(curValue); 76 | } 77 | 78 | connectedCallback() { 79 | if (!this._expressionLines || !this._expressionLines.length) { 80 | this.addNewExpression(); 81 | } 82 | } 83 | 84 | dispatchFlowValueChangedEvent() { 85 | const valueChangeEvent = new FlowAttributeChangeEvent('inputOptionsValues', this.inputOptionsValues); 86 | this.dispatchEvent(valueChangeEvent); 87 | } 88 | 89 | handleParamChange(event) { 90 | 91 | let curExpressionLine = this.getExpressionLineById(event.currentTarget.dataset.uid); 92 | if (curExpressionLine) { 93 | let isOptionValid = this.isOptionValid(curExpressionLine[event.currentTarget.name], event.detail.value); 94 | if (isOptionValid) { 95 | curExpressionLine[event.currentTarget.name] = event.detail.value; 96 | if (event.currentTarget.name === settings.attributeParamName) { 97 | let curVariable = this.getFlowVariableByApiName(event.detail.value); 98 | if (curVariable) { 99 | let definedType = settings.inputTypeMap[curVariable.DataType]; 100 | curExpressionLine.Type__c = definedType ? definedType : settings.inputTypeText 101 | } 102 | } 103 | } else { 104 | //TODO: handle error invalid option 105 | console.log('Option is invalid: ' + event.detail.value); 106 | } 107 | } 108 | this.dispatchFlowValueChangedEvent(); 109 | } 110 | 111 | setVariablesOptions() { 112 | this._inputOptions = []; 113 | if (this._flowVariables && this._flowVariables.length) { 114 | this._flowVariables.forEach(curVariable => { 115 | if (!curVariable.IsCollection) { 116 | if (curVariable.IsInput) { 117 | this._inputOptions.push({ 118 | label: curVariable.ApiName, 119 | value: curVariable.ApiName 120 | }) 121 | } 122 | } 123 | }) 124 | } 125 | } 126 | 127 | handleValueChange(event) { 128 | if(event.currentTarget.dataset) { 129 | let curExpressionLine = this.getExpressionLineById(event.currentTarget.dataset.uid); 130 | if (curExpressionLine) { 131 | curExpressionLine[event.currentTarget.name] = event.target.value; 132 | } 133 | } 134 | this.dispatchFlowValueChangedEvent(); 135 | } 136 | 137 | getExpressionLineById(id) { 138 | return this._expressionLines.find(curLine => curLine.uid.toString() === id); 139 | } 140 | 141 | getFlowVariableByApiName(apiName) { 142 | if (this._flowVariables && this._flowVariables.length) { 143 | return this._flowVariables.find(curVariable => curVariable.ApiName === apiName); 144 | } 145 | } 146 | 147 | handleExpressionRemove(event) { 148 | this._expressionLines = this._expressionLines.filter(curLine => curLine.uid.toString() !== event.currentTarget.dataset.uid); 149 | } 150 | 151 | handleAddExpression() { 152 | this.addNewExpression(); 153 | } 154 | 155 | addNewExpression() { 156 | this._expressionLines.push(this.generateNewExpression()); 157 | } 158 | 159 | 160 | isOptionValid(selectedLineOption, newLineOption) { 161 | return true; 162 | // let validOptions = this.getValidOptions(selectedLineOption); 163 | // return !!validOptions.find(curOption => curOption.paramName === newLineOption); 164 | } 165 | 166 | get disabledAddButton() { 167 | return this._expressionLines.length >= this._inputOptions.length; 168 | } 169 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/flowTestSetInputVariables/flowTestSetInputVariables.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48.0 4 | Flow Test Set Input Variables 5 | true 6 | Flow Test Set Input Variables 7 | 8 | lightning__FlowScreen 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true, 4 | "baseUrl": ".", 5 | "paths": { 6 | "c/datatableV2": [ 7 | "datatableV2/datatableV2.js" 8 | ], 9 | "c/expressionBuilder": [ 10 | "expressionBuilder/expressionBuilder.js" 11 | ], 12 | "c/expressionLine": [ 13 | "expressionLine/expressionLine.js" 14 | ], 15 | "c/flowPickerFSC": [ 16 | "flowPickerFSC/flowPickerFSC.js" 17 | ], 18 | "c/flowTestGeneratorUtils": [ 19 | "flowTestGeneratorUtils/flowTestGeneratorUtils.js" 20 | ], 21 | "c/flowTestSetAssertions": [ 22 | "flowTestSetAssertions/flowTestSetAssertions.js" 23 | ], 24 | "c/flowTestSetInputVariables": [ 25 | "flowTestSetInputVariables/flowTestSetInputVariables.js" 26 | ] 27 | } 28 | }, 29 | "include": [ 30 | "**/*", 31 | "../../../../.sfdx/typings/lwc/**/*.d.ts" 32 | ], 33 | "typeAcquisition": { 34 | "include": [ 35 | "jest" 36 | ] 37 | }, 38 | "paths": { 39 | "c/*": [ 40 | "*" 41 | ] 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/setOwner/setOwner.css: -------------------------------------------------------------------------------- 1 | .button-align-bottom { 2 | align-self: flex-end; 3 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/setOwner/setOwner.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/setOwner/setOwner.js: -------------------------------------------------------------------------------- 1 | import {LightningElement, api, track, wire} from 'lwc'; 2 | 3 | import Search from '@salesforce/label/c.Search'; 4 | import For from '@salesforce/label/c.For'; 5 | import TooManyResultsMessage from '@salesforce/label/c.TooManyResultsMessage'; 6 | import Queues from '@salesforce/label/c.Queues'; 7 | import RelatedUsers from '@salesforce/label/c.RelatedUsers'; 8 | import PublicGroups from '@salesforce/label/c.PublicGroups'; 9 | import Roles from '@salesforce/label/c.Roles'; 10 | import Users from '@salesforce/label/c.Users'; 11 | 12 | import USER_NAME_FIELD from '@salesforce/schema/User.Name'; 13 | import GROUP_NAME_FIELD from '@salesforce/schema/Group.Name'; 14 | 15 | import searchMemberByType from '@salesforce/apex/usf3.SearchUtils.searchMemberByType'; 16 | 17 | import getSingleMembersByTypeAndId from '@salesforce/apex/usf3.SearchUtils.getSingleMembersByTypeAndId'; 18 | import {ShowToastEvent} from 'lightning/platformShowToastEvent'; 19 | //import {logger, logError} from 'fbc/lwcLogger'; 20 | 21 | import { 22 | generateCapabilityColumns, 23 | splitValues 24 | } from 'c/buttonUtils'; 25 | 26 | 27 | const typeMapping = { 28 | Group: PublicGroups, 29 | Role: Roles, 30 | User: Users, 31 | Queue: Queues, 32 | RelatedUsers: RelatedUsers 33 | }; 34 | 35 | export default class addNewMembers extends LightningElement { 36 | @api notifyAssignee = false; 37 | @api memberId; 38 | @api availableObjectTypes; 39 | @api supportedAddCapabilities; 40 | @api notifyAssigneeLabel; 41 | 42 | @track memberData; 43 | @track showMemberSelect = false; 44 | @track label = { 45 | Search, 46 | TooManyResultsMessage, 47 | For 48 | }; 49 | @track searchString = ''; 50 | @track selectedType; 51 | @track searchResults = []; 52 | @track searchDisabled = false; 53 | source = 'ownerSetter'; 54 | 55 | @wire(getSingleMembersByTypeAndId, {type: '$selectedType', id: '$memberId'}) 56 | _getSingleMembersByTypeAndId({error, data}) { 57 | if (error) { 58 | console.log(error.body.message); 59 | } else if (data) { 60 | this.memberData = data[this.memberId]; 61 | } 62 | } 63 | 64 | connectedCallback() { 65 | if (this.availableObjectTypes && this.availableObjectTypes.length > 0) { 66 | this.selectedType = splitValues(this.availableObjectTypes)[0]; 67 | } 68 | } 69 | 70 | get objectTypes() { 71 | return splitValues(this.availableObjectTypes).map(curTypeName => { 72 | return this.getTypeDescriptor(curTypeName); 73 | }); 74 | } 75 | 76 | getTypeDescriptor(typeName) { 77 | return {value: typeName, label: typeMapping[typeName]}; 78 | } 79 | 80 | get tooManyResults() { 81 | return this.searchResults.length > 199; 82 | } 83 | 84 | get columns() { 85 | return [{ 86 | label: 'Name', 87 | fieldName: 'label' 88 | }].concat(generateCapabilityColumns(this.supportedAddCapabilities)); 89 | } 90 | 91 | get showNotifyAssignee() { 92 | return this.selectedType === 'User'; 93 | } 94 | 95 | get selectedMemberName() { 96 | if (this.memberData) { 97 | return this.memberData.Name; 98 | } else { 99 | return null; 100 | } 101 | } 102 | 103 | handleTypeChange(event) { 104 | this.selectedType = event.detail.value; 105 | this.searchResults = []; 106 | } 107 | 108 | async actuallySearch() { 109 | this.searchResults = []; 110 | this.searchDisabled = true; 111 | 112 | const results = 113 | await searchMemberByType({ 114 | searchString: this.searchString, 115 | memberTypes: [this.selectedType] 116 | }); 117 | this.searchResults = results[this.selectedType]; 118 | 119 | this.searchDisabled = false; 120 | } 121 | 122 | searchEventHandler(event) { 123 | if (event.detail.value) { 124 | const searchString = event.detail.value 125 | .trim() 126 | .replace(/\*/g) 127 | .toLowerCase(); 128 | 129 | if (searchString.length <= 1) { 130 | return; 131 | } 132 | 133 | this.searchString = searchString; 134 | } 135 | } 136 | 137 | listenForEnter(event) { 138 | if (event.code === 'Enter') { 139 | this.actuallySearch(); 140 | } 141 | } 142 | 143 | handleRowAction(event) { 144 | const memberRefreshedEvt = new CustomEvent('membersrefreshed', { 145 | bubbles: true, detail: { 146 | memberId: event.detail.row.value, 147 | notifyAssignee: (this.selectedType === 'User' ? this.notifyAssignee : false), 148 | } 149 | }); 150 | this.dispatchEvent(memberRefreshedEvt); 151 | } 152 | 153 | toastTheError(e, errorSource) { 154 | //logError(this.log, this.source, errorSource, e); 155 | this.dispatchEvent( 156 | new ShowToastEvent({ 157 | message: e.body.message, 158 | variant: 'error' 159 | }) 160 | ); 161 | } 162 | 163 | toggleMemberSelect() { 164 | this.showMemberSelect = !this.showMemberSelect; 165 | } 166 | 167 | handleNotifyAssigneeChange(event) { 168 | this.notifyAssignee = event.target.checked === true; 169 | } 170 | } 171 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/setOwner/setOwner.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | true 5 | 6 | lightning__RecordPage 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/setPickList/setPickList.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/setPickList/setPickList.js: -------------------------------------------------------------------------------- 1 | import {LightningElement, api, track, wire} from 'lwc'; 2 | import getPicklistValues from '@salesforce/apex/usf3.FieldPickerController.getPicklistValues'; 3 | import NonePicklistValueLabel from '@salesforce/label/c.NonePicklistValueLabel'; 4 | 5 | export default class setPickList extends LightningElement { 6 | @api masterLabel = 'Picklist Options'; 7 | @api valueAboveRadioLabel = 'The value above the current one'; 8 | @api valueBelowRadioLabel = 'The value below the current one'; 9 | @api specificValueRadioLabel = 'A Specific Value'; 10 | @api picklistObjectName; 11 | @api picklistFieldName; 12 | @api selectionType; 13 | @api value; 14 | 15 | @track _selectionType; 16 | @track _value; 17 | @track availableValues; 18 | @track errors = []; 19 | 20 | labels = { 21 | none: NonePicklistValueLabel, 22 | previous: '__PicklistPrevious', 23 | next: '__PicklistNext', 24 | nullValue: '__null' 25 | }; 26 | 27 | connectedCallback() { 28 | // this._selectionType = this.selectionType; 29 | this._value = (this.value === null ? this.labels.nullValue : this.value); 30 | if (this._value === this.labels.next || this._value === this.labels.previous) { 31 | this._selectionType = this._value; 32 | } else { 33 | this._selectionType = this.labels.nullValue; 34 | } 35 | } 36 | 37 | @wire(getPicklistValues, {objectApiName: '$picklistObjectName', fieldName: '$picklistFieldName'}) 38 | _getPicklistValues({error, data}) { 39 | if (error) { 40 | this.errors.push(error.body.message); 41 | } else if (data) { 42 | this.availableValues = JSON.parse(JSON.stringify(data)); 43 | this.availableValues.unshift({value: this.labels.nullValue, label: this.labels.none}); 44 | } 45 | } 46 | 47 | get picklistOptions() { 48 | return [ 49 | {label: this.valueAboveRadioLabel, value: this.labels.previous}, 50 | {label: this.valueBelowRadioLabel, value: this.labels.next}, 51 | {label: this.specificValueRadioLabel, value: this.labels.nullValue}]; 52 | } 53 | 54 | get isSpecificValue() { 55 | return this._selectionType === this.labels.nullValue; 56 | } 57 | 58 | handleOptionChange(event) { 59 | this._selectionType = event.detail.value; 60 | this.handlePicklistValueChange(event); 61 | } 62 | 63 | handlePicklistValueChange(event) { 64 | const memberRefreshedEvt = new CustomEvent('picklistselected', { 65 | bubbles: true, detail: { 66 | value: (event.detail.value === this.labels.nullValue ? null : event.detail.value), 67 | selectionType: this._selectionType 68 | } 69 | }); 70 | this.dispatchEvent(memberRefreshedEvt); 71 | } 72 | 73 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/setPickList/setPickList.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | setPickList 5 | true 6 | setPickList 7 | 8 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/updateFieldCPE/updateFieldCPE.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/updateFieldCPE/updateFieldCPE.js: -------------------------------------------------------------------------------- 1 | import {LightningElement, api, wire, track} from 'lwc'; 2 | 3 | export default class updateFieldConfigurator extends LightningElement { 4 | 5 | @api supportedSystemTypes; 6 | 7 | @track _value; 8 | @track _objectType; 9 | @track _fieldName; 10 | @track selectedField; 11 | @track textOption; 12 | @track formulaEditorVisible = false; 13 | @track formulaEditorMessage = 'Show Formula Editor'; 14 | @track errorStrings; 15 | 16 | labels = { 17 | fieldTypeNotSupported: 'Selected field type is not supported', 18 | fieldValueLabel: 'Set Field Value', 19 | fieldNotUpdatable: 'Select field can not be updated' 20 | }; 21 | 22 | customReferenceTypes = ['User']; 23 | 24 | @api get objectType() { 25 | return this._objectType; 26 | } 27 | 28 | set objectType(value) { 29 | this._objectType = value; 30 | } 31 | 32 | @api get fieldName() { 33 | return this._fieldName; 34 | } 35 | 36 | set fieldName(value) { 37 | this._fieldName = value; 38 | } 39 | 40 | @api get value() { 41 | return this._value; 42 | } 43 | 44 | set value(value) { 45 | this._value = value; 46 | } 47 | 48 | get textOptions() { 49 | let resultTextOptions = []; 50 | if (this.fieldProperties && !this.fieldProperties.isRequired) { 51 | resultTextOptions.push({label: 'A blank value (null)', value: 'null'}); 52 | } 53 | resultTextOptions.push({label: 'Use a formula to set the new value', value: 'formula_builder'}); 54 | return resultTextOptions; 55 | } 56 | 57 | get checkboxOptions() { 58 | return [ 59 | {label: 'True', value: 'true'}, 60 | {label: 'False', value: 'false'}]; 61 | } 62 | 63 | handleFieldChange(event) { 64 | this.selectedField = JSON.parse(JSON.stringify(event.detail)); 65 | if (this._objectType !== this.selectedField.objectType) { 66 | this._objectType = this.selectedField.objectType; 67 | } 68 | if (this._fieldName !== this.selectedField.fieldName) { 69 | this._fieldName = this.selectedField.fieldName; 70 | } 71 | if (!this.selectedField.isInit) { 72 | this._value = null; 73 | } 74 | } 75 | 76 | handleValueChange(event) { 77 | this._value = event.detail.value; 78 | } 79 | 80 | handleOwnerChange(event) { 81 | this._value = event.detail.memberId; 82 | // event.detail.notifyAssignee; 83 | } 84 | 85 | handleTextOptionValueChange(event) { 86 | this.textOption = event.detail.value; 87 | } 88 | 89 | handleSave(event) { 90 | 91 | } 92 | 93 | toggleFormulaEditor() { 94 | this.formulaEditorVisible = !this.formulaEditorVisible; 95 | if (this.formulaEditorVisible) { 96 | this.formulaEditorMessage = 'Hide Formula Editor'; 97 | } else { 98 | this.formulaEditorMessage = 'Show Formula Editor' 99 | } 100 | } 101 | 102 | get showFormulaBuilderOption() { 103 | return this.textOption === 'formula_builder'; 104 | } 105 | 106 | /* @api validate() { 107 | const validity = []; 108 | if (true) { 109 | this.errorStrings = 'Validation error: Test Message'; 110 | validity.push({ 111 | key: 'testValidityErrorKey', 112 | errorString: 'Test validity message', 113 | }); 114 | } 115 | return validity; 116 | } */ 117 | 118 | get fieldProperties() { 119 | if (this.selectedField && this.selectedField.fieldName) { 120 | return { 121 | ...this.selectedField, ...{ 122 | isTextField: this.selectedField.dataType === 'String' || (this.selectedField.dataType === 'Reference' && !this.customReferenceTypes.some(refType => this.selectedField.referenceTo.includes(refType))), 123 | isUserReferenceField: this.selectedField.referenceTo.includes('User'), 124 | isBoolean: this.selectedField.dataType === 'Boolean', 125 | isPicklist: this.selectedField.dataType === 'Picklist', 126 | isDateTime: this.selectedField.dataType === 'DateTime', 127 | isDate: this.selectedField.dataType === 'Date', 128 | isCurrency: this.selectedField.dataType === 'Currency', 129 | isAddress: this.selectedField.dataType === 'Address', 130 | isDouble: this.selectedField.dataType === 'Double' || this.selectedField.dataType === 'Int', 131 | isTextArea: this.selectedField.dataType === 'TextArea', 132 | isPhone: this.selectedField.dataType === 'Phone', 133 | isUrl: this.selectedField.dataType === 'Url', 134 | isDisabled: this.selectedField.updateable !== true, 135 | isRequired: this.selectedField.required === true 136 | } 137 | } 138 | } 139 | return null; 140 | } 141 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/updateFieldCPE/updateFieldCPE.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 46.0 4 | updateFieldConfigurator 5 | false 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Assertion__c/Flow_Test_Method_Assertion__c.object-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Accept 5 | Default 6 | 7 | 8 | Accept 9 | Large 10 | Default 11 | 12 | 13 | Accept 14 | Small 15 | Default 16 | 17 | 18 | CancelEdit 19 | Default 20 | 21 | 22 | CancelEdit 23 | Large 24 | Default 25 | 26 | 27 | CancelEdit 28 | Small 29 | Default 30 | 31 | 32 | Clone 33 | Default 34 | 35 | 36 | Clone 37 | Large 38 | Default 39 | 40 | 41 | Clone 42 | Small 43 | Default 44 | 45 | 46 | Delete 47 | Default 48 | 49 | 50 | Delete 51 | Large 52 | Default 53 | 54 | 55 | Delete 56 | Small 57 | Default 58 | 59 | 60 | Edit 61 | Default 62 | 63 | 64 | Edit 65 | Large 66 | Default 67 | 68 | 69 | Edit 70 | Small 71 | Default 72 | 73 | 74 | List 75 | Default 76 | 77 | 78 | List 79 | Large 80 | Default 81 | 82 | 83 | List 84 | Small 85 | Default 86 | 87 | 88 | New 89 | Default 90 | 91 | 92 | New 93 | Large 94 | Default 95 | 96 | 97 | New 98 | Small 99 | Default 100 | 101 | 102 | SaveEdit 103 | Default 104 | 105 | 106 | SaveEdit 107 | Large 108 | Default 109 | 110 | 111 | SaveEdit 112 | Small 113 | Default 114 | 115 | 116 | Tab 117 | Default 118 | 119 | 120 | Tab 121 | Large 122 | Default 123 | 124 | 125 | Tab 126 | Small 127 | Default 128 | 129 | 130 | View 131 | Default 132 | 133 | 134 | View 135 | Large 136 | Default 137 | 138 | 139 | View 140 | Small 141 | Default 142 | 143 | false 144 | SYSTEM 145 | Deployed 146 | false 147 | true 148 | false 149 | false 150 | false 151 | false 152 | false 153 | true 154 | true 155 | ControlledByParent 156 | 157 | 158 | 159 | Text 160 | 161 | Flow Test Method Assertions 162 | 163 | ControlledByParent 164 | Public 165 | 166 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Assertion__c/fields/Assertion_Formula__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Assertion_Formula__c 4 | false 5 | 6 | 10000 7 | false 8 | LongTextArea 9 | 5 10 | 11 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Assertion__c/fields/Error_Message__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Error_Message__c 4 | false 5 | 6 | 255 7 | false 8 | false 9 | Text 10 | false 11 | 12 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Assertion__c/fields/Flow_Test__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flow_Test__c 4 | false 5 | 6 | Flow_Test__c 7 | Flow Test Method Assertions 8 | Flow_Test_Method_Assertions 9 | 0 10 | false 11 | false 12 | MasterDetail 13 | false 14 | 15 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Input_Variable__c/Flow_Test_Method_Input_Variable__c.object-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Accept 5 | Default 6 | 7 | 8 | Accept 9 | Large 10 | Default 11 | 12 | 13 | Accept 14 | Small 15 | Default 16 | 17 | 18 | CancelEdit 19 | Default 20 | 21 | 22 | CancelEdit 23 | Large 24 | Default 25 | 26 | 27 | CancelEdit 28 | Small 29 | Default 30 | 31 | 32 | Clone 33 | Default 34 | 35 | 36 | Clone 37 | Large 38 | Default 39 | 40 | 41 | Clone 42 | Small 43 | Default 44 | 45 | 46 | Delete 47 | Default 48 | 49 | 50 | Delete 51 | Large 52 | Default 53 | 54 | 55 | Delete 56 | Small 57 | Default 58 | 59 | 60 | Edit 61 | Default 62 | 63 | 64 | Edit 65 | Large 66 | Default 67 | 68 | 69 | Edit 70 | Small 71 | Default 72 | 73 | 74 | List 75 | Default 76 | 77 | 78 | List 79 | Large 80 | Default 81 | 82 | 83 | List 84 | Small 85 | Default 86 | 87 | 88 | New 89 | Default 90 | 91 | 92 | New 93 | Large 94 | Default 95 | 96 | 97 | New 98 | Small 99 | Default 100 | 101 | 102 | SaveEdit 103 | Default 104 | 105 | 106 | SaveEdit 107 | Large 108 | Default 109 | 110 | 111 | SaveEdit 112 | Small 113 | Default 114 | 115 | 116 | Tab 117 | Default 118 | 119 | 120 | Tab 121 | Large 122 | Default 123 | 124 | 125 | Tab 126 | Small 127 | Default 128 | 129 | 130 | View 131 | Default 132 | 133 | 134 | View 135 | Large 136 | Default 137 | 138 | 139 | View 140 | Small 141 | Default 142 | 143 | false 144 | SYSTEM 145 | Deployed 146 | false 147 | true 148 | false 149 | false 150 | false 151 | false 152 | false 153 | true 154 | true 155 | ControlledByParent 156 | 157 | 158 | 159 | Text 160 | 161 | Flow Test Method Input Variables 162 | 163 | ControlledByParent 164 | Public 165 | 166 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Input_Variable__c/fields/Flow_Test__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flow_Test__c 4 | false 5 | 6 | Flow_Test__c 7 | Flow Test Method Input Variables 8 | Flow_Test_Method_Input_Variables 9 | 0 10 | false 11 | false 12 | MasterDetail 13 | false 14 | 15 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Input_Variable__c/fields/Type__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Type__c 4 | false 5 | 6 | 30 7 | false 8 | false 9 | Text 10 | false 11 | 12 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test_Method_Input_Variable__c/fields/Value__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Value__c 4 | false 5 | 6 | 255 7 | false 8 | false 9 | Text 10 | false 11 | 12 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test__c/Flow_Test__c.object-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Accept 5 | Default 6 | 7 | 8 | Accept 9 | Large 10 | Default 11 | 12 | 13 | Accept 14 | Small 15 | Default 16 | 17 | 18 | CancelEdit 19 | Default 20 | 21 | 22 | CancelEdit 23 | Large 24 | Default 25 | 26 | 27 | CancelEdit 28 | Small 29 | Default 30 | 31 | 32 | Clone 33 | Default 34 | 35 | 36 | Clone 37 | Large 38 | Default 39 | 40 | 41 | Clone 42 | Small 43 | Default 44 | 45 | 46 | Delete 47 | Default 48 | 49 | 50 | Delete 51 | Large 52 | Default 53 | 54 | 55 | Delete 56 | Small 57 | Default 58 | 59 | 60 | Edit 61 | Default 62 | 63 | 64 | Edit 65 | Large 66 | Default 67 | 68 | 69 | Edit 70 | Small 71 | Default 72 | 73 | 74 | List 75 | Default 76 | 77 | 78 | List 79 | Large 80 | Default 81 | 82 | 83 | List 84 | Small 85 | Default 86 | 87 | 88 | New 89 | Default 90 | 91 | 92 | New 93 | Large 94 | Default 95 | 96 | 97 | New 98 | Small 99 | Default 100 | 101 | 102 | SaveEdit 103 | Default 104 | 105 | 106 | SaveEdit 107 | Large 108 | Default 109 | 110 | 111 | SaveEdit 112 | Small 113 | Default 114 | 115 | 116 | Tab 117 | Default 118 | 119 | 120 | Tab 121 | Large 122 | Default 123 | 124 | 125 | Tab 126 | Small 127 | Default 128 | 129 | 130 | View 131 | Default 132 | 133 | 134 | View 135 | Large 136 | Default 137 | 138 | 139 | View 140 | Small 141 | Default 142 | 143 | false 144 | SYSTEM 145 | Deployed 146 | false 147 | true 148 | false 149 | false 150 | false 151 | false 152 | false 153 | true 154 | true 155 | Private 156 | 157 | 158 | 159 | Text 160 | 161 | Flow Tests 162 | 163 | ReadWrite 164 | Public 165 | 166 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test__c/fields/Apex_Class_Name__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Apex_Class_Name__c 4 | false 5 | 6 | 255 7 | false 8 | false 9 | Text 10 | false 11 | 12 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test__c/fields/Flow_Api_Name__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flow_Api_Name__c 4 | false 5 | 6 | 80 7 | false 8 | false 9 | Text 10 | false 11 | 12 | -------------------------------------------------------------------------------- /force-app/main/default/objects/Flow_Test__c/fields/Namespace__c.field-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Namespace__c 4 | false 5 | 6 | 80 7 | false 8 | false 9 | Text 10 | false 11 | 12 | -------------------------------------------------------------------------------- /force-app/main/default/permissionsets/Flow_Test_Manager.permissionset-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | Flow_Test_Method_Assertion__c.Assertion_Formula__c 6 | true 7 | 8 | 9 | true 10 | Flow_Test_Method_Assertion__c.Error_Message__c 11 | true 12 | 13 | 14 | true 15 | Flow_Test_Method_Input_Variable__c.Type__c 16 | true 17 | 18 | 19 | true 20 | Flow_Test_Method_Input_Variable__c.Value__c 21 | true 22 | 23 | 24 | true 25 | Flow_Test__c.Apex_Class_Name__c 26 | true 27 | 28 | 29 | true 30 | Flow_Test__c.Flow_Api_Name__c 31 | true 32 | 33 | 34 | true 35 | Flow_Test__c.Namespace__c 36 | true 37 | 38 | false 39 | 40 | 41 | true 42 | true 43 | true 44 | true 45 | true 46 | Flow_Test_Method_Assertion__c 47 | true 48 | 49 | 50 | true 51 | true 52 | true 53 | true 54 | true 55 | Flow_Test_Method_Input_Variable__c 56 | true 57 | 58 | 59 | true 60 | true 61 | true 62 | true 63 | true 64 | Flow_Test__c 65 | true 66 | 67 | 68 | -------------------------------------------------------------------------------- /force-app/main/default/remoteSiteSettings/curOrg.remoteSite-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | true 5 | https://energy-connect-8039-dev-ed--c.visualforce.com 6 | 7 | -------------------------------------------------------------------------------- /scripts/apex/hello.apex: -------------------------------------------------------------------------------- 1 | // Use .apex files to store anonymous Apex. 2 | // You can execute anonymous Apex in VS Code by selecting the 3 | // apex text and running the command: 4 | // SFDX: Execute Anonymous Apex with Currently Selected Text 5 | // You can also execute the entire file by running the command: 6 | // SFDX: Execute Anonymous Apex with Editor Contents 7 | 8 | string tempvar = 'Enter_your_name_here'; 9 | System.debug('Hello World!'); 10 | System.debug('My name is ' + tempvar); -------------------------------------------------------------------------------- /scripts/soql/account.soql: -------------------------------------------------------------------------------- 1 | // Use .soql files to store SOQL queries. 2 | // You can execute queries in VS Code by selecting the 3 | // query text and running the command: 4 | // SFDX: Execute SOQL Query with Currently Selected Text 5 | 6 | SELECT Id, Name FROM Account; -------------------------------------------------------------------------------- /sfdx-project.json: -------------------------------------------------------------------------------- 1 | { 2 | "packageDirectories": [ 3 | { 4 | "path": "force-app", 5 | "default": true, 6 | "dependencies": [ 7 | { 8 | "package": "FlowActionsBasePack@3.11.0-0" 9 | }, 10 | { 11 | "package": "FlowScreenComponentsBasePack@3.0.18-0" 12 | } 13 | ], 14 | "package": "FlowTestBuilder", 15 | "versionName": "ver 0.1", 16 | "versionNumber": "0.1.0.NEXT" 17 | } 18 | ], 19 | "namespace": "", 20 | "sfdcLoginUrl": "https://login.salesforce.com", 21 | "sourceApiVersion": "48.0", 22 | "packageAliases": { 23 | "FlowTestBuilder": "0Hof4000000TN9TCAW", 24 | "FlowTestBuilder@1.0.0-0": "04tf4000003RQvvAAG", 25 | "FlowActionsBasePack@3.11.0-0": "04t8b000000mL0aAAE", 26 | "FlowScreenComponentsBasePack@3.0.18-0": "04t5G0000043xsbQAA", 27 | "FlowActionsBasePack@2.32.0-0": "04t4W0000034KebQAE", 28 | "FlowScreenComponentsBasePack@2.5.5-0": "04t5G000003rUabQAE", 29 | "FlowTestBuilder@1.0.1-0": "04t5G000003rUbjQAE", 30 | "FlowTestBuilder@1.0.2-0": "04t5G000003rUdQQAU", 31 | "FlowTestBuilder@3.0.0": "04t5G000004C6uTQAS" 32 | } 33 | } --------------------------------------------------------------------------------