diff --git a/.aditoprj/ignoredScanServiceTasks.json b/.aditoprj/ignoredScanServiceTasks.json index bad77c8c7df0345b93811fa627e1ca06bf884517..2c5c825c80413c60535787fc709ee0af872ec9d8 100644 --- a/.aditoprj/ignoredScanServiceTasks.json +++ b/.aditoprj/ignoredScanServiceTasks.json @@ -24,6 +24,42 @@ "description": "There is no index for the column \"TESTING_CONTACT_ID\" in the table \"BULKMAIL\" [59]", "groupName": "nb-tasklist-warning" }, + { + "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", + "line": -1, + "description": "The table \"ASYS_AUDIT\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, + { + "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", + "line": -1, + "description": "The table \"ASYS_COLLECTOR_DATA\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, + { + "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", + "line": -1, + "description": "The table \"ASYS_UIDRESOLVER\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, + { + "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", + "line": -1, + "description": "The table \"ASYS_VERSIONHISTORY\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, + { + "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", + "line": -1, + "description": "The table \"ASYS_XMPP_HISTORY\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, + { + "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", + "line": -1, + "description": "The table \"ASYS_XMPP_OFFLINESTANZA\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, { "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", "line": -1, diff --git a/.liquibase/Data_alias/basic/2021.0.0/EwsContactSync/create_ab_synccontact.xml b/.liquibase/Data_alias/basic/2021.0.0/EwsContactSync/create_ab_synccontact.xml new file mode 100644 index 0000000000000000000000000000000000000000..9de2f01cc35fba70afd6992a3995da9c8e1b7431 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/EwsContactSync/create_ab_synccontact.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="A.Riedl" id="9820d74b-1b58-4ffd-9f5d-8c4d670bda47"> + <createTable tableName="AB_SYNCCONTACT"> + <column name="SYNCCONTACTID" type="char(36)"> + <constraints primaryKey="true" primaryKeyName="PK_SYNCCONTACTID"/> + </column> + <column name="ASYS_FAVORITEID" type="char(36)"/> + <column name="EXCHANGEID" type="varchar(254)"/> + <column name="USER_ID" type="char(46)"/> + <column name="CONTACT_ID" type="char(36)"/> + <column name="DATE_DEL" type="datetime"/> + <column name="DATE_EDIT" type="datetime"/> + <column name="DATE_NEW" type="datetime"/> + </createTable> + <createIndex indexName="idx_exchangeId" tableName="AB_SYNCCONTACT"> + <column name="EXCHANGEID"/> + </createIndex> + <createIndex tableName="AB_SYNCCONTACT" indexName="idx_UserId"> + <column name="USER_ID"/> + </createIndex> + <createIndex tableName="AB_SYNCCONTACT" indexName="idx_ContactId"> + <column name="CONTACT_ID"/> + </createIndex> + <addUniqueConstraint + columnNames="ASYS_FAVORITEID" + constraintName="const_uniqueFavoriteId" + tableName="AB_SYNCCONTACT"/> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/changelog.xml b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..89dbbe1de6912103cd930d998bcae1d29aea8d2f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/changelog.xml @@ -0,0 +1,6 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include file="init_keyword_category.xml" relativeToChangelogFile="true"/> + <include file="update_keyword_entry.xml" relativeToChangelogFile="true"/> + <include file="update_keyword_attribute.xml" relativeToChangelogFile="true"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/init_keyword_category.xml b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/init_keyword_category.xml new file mode 100644 index 0000000000000000000000000000000000000000..0e14676a879d4ee2b4ec18efee89baf6a1dd6517 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/init_keyword_category.xml @@ -0,0 +1,509 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="autogenerated" id="ecc60096-2a99-4e64-9a5c-9d0a18211cf3"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <column name="NAME" value="ADVISER_ROLE"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <column name="NAME" value="ActivityCategory"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="53a36940-7781-4d62-bf8d-478c6c3511bf"/> + <column name="NAME" value="ActivityDirection"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <column name="NAME" value="AddressType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <column name="NAME" value="AttributeType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e685dcfe-cbf9-4a3f-b45f-3f449779a48f"/> + <column name="NAME" value="BulkMailProblem"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="25cb446a-24cd-4ebd-aad2-320da20830da"/> + <column name="NAME" value="BulkMailRecipientStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <column name="NAME" value="BulkMailStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="288cd7a1-3cdb-43bc-8832-ffb58e651956"/> + <column name="NAME" value="CallAnswerMode"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="5a49ccc0-bf6b-4842-81d9-78d8841c66a2"/> + <column name="NAME" value="CallDirection"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="9e2ad22e-be5f-4f11-b273-42d7d7b5f946"/> + <column name="NAME" value="CampaignManagementCostCategory"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="43bffa8e-581a-4854-917b-c75e9119921f"/> + <column name="NAME" value="CampaignManagementStates"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="59790e82-72d4-4682-8e4d-df93ccb35c64"/> + <column name="NAME" value="CampaignManagementStepStates"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="14adf8de-aa3a-4c89-99bd-49477c2fa8a6"/> + <column name="NAME" value="ChecklistEntryType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="0e8217d7-6712-4c16-80d4-d5c9c26a4f47"/> + <column name="NAME" value="ClassificationType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <column name="NAME" value="CommunicationMedium"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <column name="NAME" value="CommunicationMediumCampaign"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <column name="NAME" value="CompetitionState"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <column name="NAME" value="ContactContactrole"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="cda5deac-5b7c-4c98-9904-2eb3b224235d"/> + <column name="NAME" value="ContactDepartment"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="bfc9eb87-0292-4fa1-9c87-39666c2ae6d2"/> + <column name="NAME" value="ContactPosition"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="1f3bde3a-7d74-4335-abd3-561028a1e0c3"/> + <column name="NAME" value="ContactStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="2e785215-4292-40ff-a7bf-d4d0f79a738e"/> + <column name="NAME" value="ContractPayment"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="39d147db-ba80-446b-a80f-d23ef9f71659"/> + <column name="NAME" value="ContractStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="5c7a2307-ae32-4d19-976b-29f8675808fa"/> + <column name="NAME" value="ContractType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="7d329db3-1874-473d-b4e8-56fd4b84054c"/> + <column name="NAME" value="Currency"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="9d1cb7d0-931e-4d5c-a54f-e5c917228157"/> + <column name="NAME" value="DISTRICT_ORIGIN"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="3d8699cb-e0a0-483a-b52d-d5bdfe2ed336"/> + <column name="NAME" value="DSGVODeadline"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="598681d4-5649-4a9d-b918-f35fd69a2b0f"/> + <column name="NAME" value="DSGVOGuarantee"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="0369f43a-e46d-42f7-bfe3-5bc2c7d9d584"/> + <column name="NAME" value="DSGVOPurpose"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="c561d74a-44dc-4b57-acad-055f0f557b6f"/> + <column name="NAME" value="DSGVOStatuoritysource"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e22ca44f-5d2d-47b6-a844-6801fb6b877f"/> + <column name="NAME" value="DSGVOTransmission"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + <column name="NAME" value="DSGVOType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="58ff4cea-10b7-4cf9-b326-81337b5ddd48"/> + <column name="NAME" value="DeliveryTerm"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="f118b0c3-c65f-4c83-8f5a-cb885fa3323a"/> + <column name="NAME" value="DiscussionStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="b5afd40b-bfa7-4aee-89ea-06b8c7deb304"/> + <column name="NAME" value="DocumentTemplateType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <column name="NAME" value="DocumentTemplateTypeCategory"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="0c4c05b5-8294-441f-84d4-3424f1c38732"/> + <column name="NAME" value="DunningLevel"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="8ef58a64-8905-4d5d-b965-40c7e12a0b1e"/> + <column name="NAME" value="DupStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <column name="NAME" value="ImportFields"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="35d717d5-4260-4a33-8183-a430e3624822"/> + <column name="NAME" value="ImportStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="c1295c26-c580-42b8-85dc-6c08811c812c"/> + <column name="NAME" value="KeywordAttributeType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="37f65755-e1c9-4912-a7d3-2922c754ed8d"/> + <column name="NAME" value="KnowledgePublishLevel"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="6a4a5250-6231-4bf7-8c16-bb5994c4e2d0"/> + <column name="NAME" value="KnowledgeType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <column name="NAME" value="MemberRole"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="dbd944bc-0c18-4acc-b4da-2cf382309459"/> + <column name="NAME" value="NotificationPriority"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="50ecc8e7-15e3-4a40-8028-d6de5241b88e"/> + <column name="NAME" value="NotificationState"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <column name="NAME" value="OfferProbability"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <column name="NAME" value="OfferStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="38df36cd-2600-4397-a272-0defa1e79e5c"/> + <column name="NAME" value="OrderType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <column name="NAME" value="OrganisationType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ab8d06bb-18eb-4fbe-9e00-ecb34bd38c8f"/> + <column name="NAME" value="PaymentTerm"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="8653e732-0a48-4697-a858-ce58a524553c"/> + <column name="NAME" value="PermissionAccessType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e35fdba2-11ba-4d8c-b443-5ab49a19dcc1"/> + <column name="NAME" value="PermissionCalendarType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="dc580c6b-6748-4eea-97fa-9a08776e395f"/> + <column name="NAME" value="PermissionCondType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e8e138b0-5628-45c5-b0c2-6aa0086b2ae2"/> + <column name="NAME" value="PersonGender"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <column name="NAME" value="ProductGroupcode"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="b92db41e-bdbd-4c3c-96ec-b23672f25340"/> + <column name="NAME" value="ProductPricelist"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="cd77dc51-70ee-469c-b0d6-687893237de1"/> + <column name="NAME" value="QuantityUnit"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="13a3d854-4286-4165-be71-dc246f72c100"/> + <column name="NAME" value="SalesorderState"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <column name="NAME" value="SalesprojectPhase"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="f5622bfc-35b3-4e74-bb8b-b4cbdcafeb8c"/> + <column name="NAME" value="SalesprojectPricePolitics"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <column name="NAME" value="SalesprojectProbability"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="0c3addc3-cbe9-4bdf-8db7-a53401b24a22"/> + <column name="NAME" value="SalesprojectSource"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <column name="NAME" value="SalesprojectState"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="fe288fb5-c5e4-4473-b052-809ce32673eb"/> + <column name="NAME" value="SalesprojectStrength"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="54d6ad1d-44a0-479d-b42a-982126572658"/> + <column name="NAME" value="SalesprojectWeakness"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <column name="NAME" value="SalesprojectWonLost"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="63530dfc-c3e6-447b-b3ed-b52adae42a68"/> + <column name="NAME" value="SerialLetterStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="8efff07c-1853-4040-90c2-e8b343db8d18"/> + <column name="NAME" value="StockWarehouse"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ec9ac6e2-d2de-4e8e-bfad-bebd38c65026"/> + <column name="NAME" value="TaskPriority"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="5f94376f-18bb-41d5-8be7-f7dce020495c"/> + <column name="NAME" value="TaskProgress"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <column name="NAME" value="TaskStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="bb351e6a-c35b-4af6-8540-898b2cd368a4"/> + <column name="NAME" value="TaskType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="f3986324-87ce-485f-8688-c4e228c39fc6"/> + <column name="NAME" value="TicketType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="30d87734-9229-460d-abf4-73ce73466534"/> + <column name="NAME" value="VisitPlanEntryStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="623bdc81-a99b-4865-958e-85abd0ed9b6a"/> + <column name="NAME" value="VisitPlanEntryStatusAppointment"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="f0abc80c-7d9d-4bb5-8d41-d204550a028e"/> + <column name="NAME" value="VisitRecommendationPrioSource"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="7147c61b-962d-426c-84a2-aaa381aeab8b"/> + <column name="NAME" value="VisitRecommendationPriority"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <column name="NAME" value="WorkflowActivityType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ecfee92f-0563-44be-98f5-1c304df8d9d0"/> + <column name="NAME" value="WorkflowCategory"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ed197cdf-bdd1-4e95-b910-dca348abf3be"/> + <column name="NAME" value="WorkflowSignalTrigger"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="380983a1-f0b2-4d0b-b38b-5c889079e414"/> + <column name="NAME" value="WorkflowTrigger"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="db283e25-904d-41cb-ac20-3c80c85fa423"/> + <column name="NAME" value="YesNo"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/update_keyword_attribute.xml b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/update_keyword_attribute.xml new file mode 100644 index 0000000000000000000000000000000000000000..7d33beee85f87f9895c14136bd896bcb45511856 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/update_keyword_attribute.xml @@ -0,0 +1,129 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="autogenerated" id="7a58d5be-9d3d-4ee6-b403-f2dac44d9b60"> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <where>AB_KEYWORD_ATTRIBUTEID = '2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'b9766994-4e7d-4079-a0bc-f1397f93047f'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ATTRIBUTEID = '14c2d515-a42f-4618-b534-7a23369d21e6'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ATTRIBUTEID = '7250ff28-1d48-41cc-bb36-8c33ace341bb'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ATTRIBUTEID = '3ea2ea72-e615-4e77-befb-e664fa5ec4e1'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ATTRIBUTEID = '5e65d4a0-af83-4a7b-babb-b1b7af4b9f20'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'd6c0fd72-ded2-4e4d-adf5-f8832d7b24f2'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <where>AB_KEYWORD_ATTRIBUTEID = '1d5c5d49-0ffd-47fb-af10-542f7cf454cd'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'c4c5352b-ff72-4323-80b9-631a24dd7245'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec9ac6e2-d2de-4e8e-bfad-bebd38c65026"/> + <where>AB_KEYWORD_ATTRIBUTEID = '6b951c1e-a0fd-4dbf-b139-e7cda94851cf'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ATTRIBUTEID = '307ecfc6-15c8-4ab9-8afa-e97b90a00c5f'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ATTRIBUTEID = '0bdeb691-f90a-4d7e-a99a-08c60816232c'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ATTRIBUTEID = '14c2d515-a42f-4618-b534-7a23369d2001'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ATTRIBUTEID = '14c2d515-a42f-4618-b534-7a23369d2002'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ATTRIBUTEID = '14c2d515-a42f-4618-b534-7a23369d2003'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ATTRIBUTEID = '14c2d515-a42f-4618-b534-7a23369d2004'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="53a36940-7781-4d62-bf8d-478c6c3511bf"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'e187a585-9ab1-4dd4-a2e9-2db14d4cc3a7'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c3addc3-cbe9-4bdf-8db7-a53401b24a22"/> + <where>AB_KEYWORD_ATTRIBUTEID = '4b05ec8a-6964-40e5-8713-0043ca926eb6'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ATTRIBUTEID = '472f9bc2-3331-49f9-aba2-72d5eeb89654'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f3986324-87ce-485f-8688-c4e228c39fc6"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'af6a0af9-0102-426b-a1f7-c8abfea79793'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f3986324-87ce-485f-8688-c4e228c39fc6"/> + <where>AB_KEYWORD_ATTRIBUTEID = '6f10015d-b7ee-43aa-99f9-87960ec2e4fd'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f3986324-87ce-485f-8688-c4e228c39fc6"/> + <where>AB_KEYWORD_ATTRIBUTEID = '729a41d1-0463-480d-bf7b-0eb6c2e96f37'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'ec51253e-9b45-468d-aafa-42331e54f32b'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ATTRIBUTEID = '93d60e4b-e984-423e-b97f-d2abf61de41d'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'f1413a2f-6631-4255-9dc9-a28e6eb30497'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ab8d06bb-18eb-4fbe-9e00-ecb34bd38c8f"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'b5a322c7-41a0-4713-b90a-3c3151833f8d'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ATTRIBUTEID = '08fcb5db-531d-4a83-8c6e-b9c9c95dcb16'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ATTRIBUTEID = '605be9b3-1fe7-4bcc-9a06-8e8651655985'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ATTRIBUTEID = '8365d915-85b9-4881-9705-542c98750078'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'ace00630-1e07-4615-8d61-2478995538fa'</where> + </update> + <update tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6a4a5250-6231-4bf7-8c16-bb5994c4e2d0"/> + <where>AB_KEYWORD_ATTRIBUTEID = 'b03f93a2-3b87-4a98-b3f9-9ed2358abdfe'</where> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/update_keyword_entry.xml b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/update_keyword_entry.xml new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d0f0160d13f2a7d09a79eaacdb2ca9340f3b --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/KeywordMigration/update_keyword_entry.xml @@ -0,0 +1,1525 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="autogenerated" id="57268a53-78a9-4999-9990-6024ee2da551"> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c1295c26-c580-42b8-85dc-6c08811c812c"/> + <where>AB_KEYWORD_ENTRYID = '6fea53cc-c167-4aad-9468-64a0c525ad47'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c1295c26-c580-42b8-85dc-6c08811c812c"/> + <where>AB_KEYWORD_ENTRYID = '93c67ca9-dec2-4d8a-863a-3b9cbce7bed1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c1295c26-c580-42b8-85dc-6c08811c812c"/> + <where>AB_KEYWORD_ENTRYID = 'f6566efc-5918-426d-9a45-a160ad632d55'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f3bde3a-7d74-4335-abd3-561028a1e0c3"/> + <where>AB_KEYWORD_ENTRYID = 'd453609f-0229-4073-982a-9d6f753515b1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f3bde3a-7d74-4335-abd3-561028a1e0c3"/> + <where>AB_KEYWORD_ENTRYID = '5ce88207-6c9b-4f3e-9f97-d6ca219c6cb4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f3bde3a-7d74-4335-abd3-561028a1e0c3"/> + <where>AB_KEYWORD_ENTRYID = '59a39f58-9ba1-4c2d-9d2b-43d43c6c8acd'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="53a36940-7781-4d62-bf8d-478c6c3511bf"/> + <where>AB_KEYWORD_ENTRYID = 'c564719a-18ef-4b9e-b130-dde8b2b518ad'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="53a36940-7781-4d62-bf8d-478c6c3511bf"/> + <where>AB_KEYWORD_ENTRYID = '6f4c6e49-36ca-4b91-ba83-c507203e1eac'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="53a36940-7781-4d62-bf8d-478c6c3511bf"/> + <where>AB_KEYWORD_ENTRYID = 'bb386131-ee36-4835-b458-6751f137a941'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="2e785215-4292-40ff-a7bf-d4d0f79a738e"/> + <where>AB_KEYWORD_ENTRYID = '03a1e5b6-64d3-47fd-8085-08b9b95bab19'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="2e785215-4292-40ff-a7bf-d4d0f79a738e"/> + <where>AB_KEYWORD_ENTRYID = '539a4ed0-d3f1-4e2f-b3ff-339276045269'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="2e785215-4292-40ff-a7bf-d4d0f79a738e"/> + <where>AB_KEYWORD_ENTRYID = '6bfb93b6-7940-4713-a053-16e17d875032'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="39d147db-ba80-446b-a80f-d23ef9f71659"/> + <where>AB_KEYWORD_ENTRYID = 'c1c736a7-95af-417d-8993-3c6cbf065059'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="39d147db-ba80-446b-a80f-d23ef9f71659"/> + <where>AB_KEYWORD_ENTRYID = '41b15842-0d31-4023-b0b9-fa97f25bc444'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="39d147db-ba80-446b-a80f-d23ef9f71659"/> + <where>AB_KEYWORD_ENTRYID = '1bebbb3c-f412-4031-b533-f1e38c86eb17'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="39d147db-ba80-446b-a80f-d23ef9f71659"/> + <where>AB_KEYWORD_ENTRYID = '03f62e1e-0b9a-4e7e-a895-2d10bf57712f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="39d147db-ba80-446b-a80f-d23ef9f71659"/> + <where>AB_KEYWORD_ENTRYID = '4959d607-b218-4e45-9c4b-b28f3ae6b0ff'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5c7a2307-ae32-4d19-976b-29f8675808fa"/> + <where>AB_KEYWORD_ENTRYID = '2c440f87-292d-4ec3-8eb2-74821e251365'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5c7a2307-ae32-4d19-976b-29f8675808fa"/> + <where>AB_KEYWORD_ENTRYID = '8dc775f2-05e1-47b5-b372-54c261f1f9d8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5c7a2307-ae32-4d19-976b-29f8675808fa"/> + <where>AB_KEYWORD_ENTRYID = '9c2a1b76-b9c4-486d-a1d2-d12970f20bd0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7d329db3-1874-473d-b4e8-56fd4b84054c"/> + <where>AB_KEYWORD_ENTRYID = 'ccc54161-e5b5-48ad-9577-d4314b4cc232'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7d329db3-1874-473d-b4e8-56fd4b84054c"/> + <where>AB_KEYWORD_ENTRYID = '67d6c3b0-d04e-4133-8ffb-4cb462277245'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7d329db3-1874-473d-b4e8-56fd4b84054c"/> + <where>AB_KEYWORD_ENTRYID = '95e2032c-fa20-4a38-8b0e-6d86db1ba097'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7d329db3-1874-473d-b4e8-56fd4b84054c"/> + <where>AB_KEYWORD_ENTRYID = 'cc329284-adf4-45f8-8e6f-6f8609536ca0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <where>AB_KEYWORD_ENTRYID = 'b6079a56-594f-463d-8b85-67db622cf522'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <where>AB_KEYWORD_ENTRYID = '7c666a94-ef9a-42e9-83c8-de3a97123bce'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <where>AB_KEYWORD_ENTRYID = '72ffaa0b-9982-4614-93be-31ae76f91d19'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <where>AB_KEYWORD_ENTRYID = '688b91d3-3c5b-4704-9220-e11b4532c05c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <where>AB_KEYWORD_ENTRYID = '5f5a0927-5827-4948-bfe7-32e83d8cf3aa'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e355059f-5b01-4438-8444-334655d6e136"/> + <where>AB_KEYWORD_ENTRYID = '611cd178-c0fc-4d2a-a9ba-af747d571755'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <where>AB_KEYWORD_ENTRYID = '87bd1a28-d364-47ee-9a01-33714f6998ba'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <where>AB_KEYWORD_ENTRYID = '9912dcc6-edf1-4a68-b605-925a31b7f9a4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <where>AB_KEYWORD_ENTRYID = 'd3bd6272-d1d9-4a5c-9f5c-772f0ee2551e'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <where>AB_KEYWORD_ENTRYID = '0cba2fe7-97c3-4eb4-9999-1fc4e8e93a7a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = 'b25309f8-d923-4b9e-9689-b14c3463c9e0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = '17ef91a4-5af5-4ae1-86cd-49568a88a2a2'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = '3ba58828-f27e-4342-b3e5-78d562756322'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = '0e3b1e24-af88-4058-bd7c-23aba5d36e06'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e8e138b0-5628-45c5-b0c2-6aa0086b2ae2"/> + <where>AB_KEYWORD_ENTRYID = 'a6b639c5-41f7-41fb-8856-059f5ea1a629'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e8e138b0-5628-45c5-b0c2-6aa0086b2ae2"/> + <where>AB_KEYWORD_ENTRYID = '7177a6a6-6a71-43a5-a2ba-fe2f80054fef'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e8e138b0-5628-45c5-b0c2-6aa0086b2ae2"/> + <where>AB_KEYWORD_ENTRYID = 'f5466bc3-77b8-45f4-817a-79b16946f680'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b92db41e-bdbd-4c3c-96ec-b23672f25340"/> + <where>AB_KEYWORD_ENTRYID = 'd0f5c21d-14ff-414b-9d51-2a2c5f49b50d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b92db41e-bdbd-4c3c-96ec-b23672f25340"/> + <where>AB_KEYWORD_ENTRYID = 'a581bf7c-1cb7-4821-96f5-6eed9a0de58c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b92db41e-bdbd-4c3c-96ec-b23672f25340"/> + <where>AB_KEYWORD_ENTRYID = 'b47478a1-1fac-4e74-921f-b47c146e034d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b92db41e-bdbd-4c3c-96ec-b23672f25340"/> + <where>AB_KEYWORD_ENTRYID = '932057b5-a2e1-4f0b-83be-28692d9e9e44'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cd77dc51-70ee-469c-b0d6-687893237de1"/> + <where>AB_KEYWORD_ENTRYID = '392ee66d-f777-43ab-b8d5-344fd75e5454'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cd77dc51-70ee-469c-b0d6-687893237de1"/> + <where>AB_KEYWORD_ENTRYID = 'a58987b7-a5f9-4f4a-8c1f-2553ff7bad60'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cd77dc51-70ee-469c-b0d6-687893237de1"/> + <where>AB_KEYWORD_ENTRYID = '74531aeb-7e01-4595-a5df-0ba3cad09071'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cd77dc51-70ee-469c-b0d6-687893237de1"/> + <where>AB_KEYWORD_ENTRYID = 'a47f5661-6b71-43a5-a14f-42aff04fe8e4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f5622bfc-35b3-4e74-bb8b-b4cbdcafeb8c"/> + <where>AB_KEYWORD_ENTRYID = 'c899faa1-6b89-4616-8640-cd2c8011d123'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f5622bfc-35b3-4e74-bb8b-b4cbdcafeb8c"/> + <where>AB_KEYWORD_ENTRYID = '4d97f540-79cc-41d7-8bf3-e45b3dfd3683'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f5622bfc-35b3-4e74-bb8b-b4cbdcafeb8c"/> + <where>AB_KEYWORD_ENTRYID = 'cbaeb1dc-493c-4811-b8bc-6654559c3ca6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ENTRYID = '9c421b0b-8529-4e07-9463-28d59fd027b6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ENTRYID = 'f78f229f-f809-4bd2-aca8-24e2f82fa220'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ENTRYID = '8cb1b843-713a-4193-aa50-9f5ca06820f8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ENTRYID = '039fd6ae-b4ad-431e-86bf-59ed2f4df0a9'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ENTRYID = 'b72294cd-3a46-4f71-ab93-72824f63f7f4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c3addc3-cbe9-4bdf-8db7-a53401b24a22"/> + <where>AB_KEYWORD_ENTRYID = 'f83c96e3-47be-4ca1-bc47-4a3a2fce7fca'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c3addc3-cbe9-4bdf-8db7-a53401b24a22"/> + <where>AB_KEYWORD_ENTRYID = '1a197ade-0c61-4643-8287-159719d519b4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c3addc3-cbe9-4bdf-8db7-a53401b24a22"/> + <where>AB_KEYWORD_ENTRYID = 'f552b84a-b8e7-472a-9ce5-d64e7f14e74b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c3addc3-cbe9-4bdf-8db7-a53401b24a22"/> + <where>AB_KEYWORD_ENTRYID = '7ea06933-94c9-4a05-ba7d-4266df9e4ab2'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="fe288fb5-c5e4-4473-b052-809ce32673eb"/> + <where>AB_KEYWORD_ENTRYID = '7963d4ed-f7a7-4a9f-aa86-fea42167145f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="fe288fb5-c5e4-4473-b052-809ce32673eb"/> + <where>AB_KEYWORD_ENTRYID = '2cacfe09-7dcd-454a-b263-46aee796bc21'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="fe288fb5-c5e4-4473-b052-809ce32673eb"/> + <where>AB_KEYWORD_ENTRYID = '919cffee-5943-4105-a5bc-a14bd33b9f67'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="54d6ad1d-44a0-479d-b42a-982126572658"/> + <where>AB_KEYWORD_ENTRYID = 'fd012937-8fe7-418e-8e55-80b3b5db331c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="54d6ad1d-44a0-479d-b42a-982126572658"/> + <where>AB_KEYWORD_ENTRYID = 'b62e1a05-af41-4d2d-978c-6c2950b202d8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="54d6ad1d-44a0-479d-b42a-982126572658"/> + <where>AB_KEYWORD_ENTRYID = '294db00d-6237-4db8-b7b6-41c5dc79a1e4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = '84574d45-8227-42dd-aea0-de2203517a2c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = '018a3bb8-5536-461f-8400-25e91550e51f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'b4562d6b-9ff1-4884-8694-3339e760ddf1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'cda9c073-25e4-4a90-b5b7-fe6514355d31'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'e84b0059-2140-4911-bb3c-73e6f3875022'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'b9216c02-7abd-43aa-a02e-89fa7d428e0c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = '6efbc578-4b80-463f-9c4f-16db99a8a9d6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'ad252ede-1e46-46ad-8ce1-6788b9103c92'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = '9fe99387-ea27-4f13-923c-f631486f7bcb'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'd1987d3a-fc7f-4882-8292-36e9699f6368'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'd62db634-94ca-49e5-970a-67696d013ed6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = '148176ea-14ed-4a74-8290-e5dffcd71eaa'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = 'd5827700-2ef1-43a1-a7f1-46a4de1ec6ec'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c8e3bb06-7165-435c-9159-5568158f9616"/> + <where>AB_KEYWORD_ENTRYID = '1a0ae403-90c0-424c-a13a-8b1c4cfd314d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="13a3d854-4286-4165-be71-dc246f72c100"/> + <where>AB_KEYWORD_ENTRYID = '8d9b0416-fee2-44d0-9334-1864ff78a824'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="13a3d854-4286-4165-be71-dc246f72c100"/> + <where>AB_KEYWORD_ENTRYID = '6f5c01ad-f9d9-43b9-834b-139974a75115'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="13a3d854-4286-4165-be71-dc246f72c100"/> + <where>AB_KEYWORD_ENTRYID = '8bac5a6d-7810-469b-8fdb-0d3a0bf8e122'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="13a3d854-4286-4165-be71-dc246f72c100"/> + <where>AB_KEYWORD_ENTRYID = 'f54b3c0b-bd80-4bc5-8a5c-55be2fd57017'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8efff07c-1853-4040-90c2-e8b343db8d18"/> + <where>AB_KEYWORD_ENTRYID = '2613a00e-7c2d-4513-bb37-c375e3e26959'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8efff07c-1853-4040-90c2-e8b343db8d18"/> + <where>AB_KEYWORD_ENTRYID = '9f20dcb7-6068-43d5-8aac-a29dcbba8fb2'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8efff07c-1853-4040-90c2-e8b343db8d18"/> + <where>AB_KEYWORD_ENTRYID = '4224ea44-ab84-4215-a1c3-6750ab07af03'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '6ab0cc9e-021c-42ef-abfd-f9f7a58aa76c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '6a479d71-2c05-4496-9c6c-c9aeef929bcf'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '34701d4d-7435-43bc-8b2f-ad2a70065a75'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '7311d8c5-edf2-492e-be4d-6f0469334611'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '972e5eb1-a457-4b75-b966-1183896dac2c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = 'cb7ecaea-b4e6-460e-9006-4a3d059b9857'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '14de196a-aaa6-41b9-b503-3df1d45acc1e'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '8a9791c1-655f-4340-91b4-cfdf6372fc75'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '1390813c-6b94-4336-9986-9bcaddab69ac'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '2c188a17-2961-45df-bd68-34b55352375c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '75a67526-6b7c-400d-b958-e1f8f45466aa'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <where>AB_KEYWORD_ENTRYID = 'ab44bd2c-dffa-4731-8a24-fad31f069c46'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <where>AB_KEYWORD_ENTRYID = 'e59169d3-c0d9-4718-b8b6-e315857948a0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <where>AB_KEYWORD_ENTRYID = '415f1cf0-8c5b-4b6e-9900-0d0d6d72381c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <where>AB_KEYWORD_ENTRYID = '6182cc48-df2b-4ba9-893a-bcedfd0e1e4b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="05fe9872-c1a8-41ab-bf0b-d0df0537fe4f"/> + <where>AB_KEYWORD_ENTRYID = 'f5b601a5-451b-4ab6-9167-b95077e90c62'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="bb351e6a-c35b-4af6-8540-898b2cd368a4"/> + <where>AB_KEYWORD_ENTRYID = '9e30365b-a9a6-4b57-ae6b-140c9e5a4eb4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <where>AB_KEYWORD_ENTRYID = 'e14fab55-4a85-48c2-a109-125eaed9dc3f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <where>AB_KEYWORD_ENTRYID = '8f55a5e3-00a9-4691-ab79-309a3eda68ec'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <where>AB_KEYWORD_ENTRYID = '808a55bc-5876-4deb-a78f-bb352c41d712'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <where>AB_KEYWORD_ENTRYID = '941e60df-a4f5-4ae8-9ca1-d9f2b2d01d9d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="91e847b9-9c35-4e1e-8936-045eb7d4f90a"/> + <where>AB_KEYWORD_ENTRYID = '2f21341b-9991-4967-a785-60216ec8c25e'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ENTRYID = '94529505-1913-4827-9812-026053bfcb51'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ENTRYID = '3b677654-84e2-4b9c-b5d0-ed2b359c45af'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ENTRYID = '6febeb71-a8a4-400c-80fd-da27ac935260'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ENTRYID = '68c3b1f7-2555-4d3b-a252-7df978173884'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = 'cc16d938-b95f-4e07-a3b4-73f8524bb664'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = '66950de5-fa8b-465c-8db1-4eb7aac98bd3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = 'aa2b9cc9-3e87-4fe9-98a2-a4e417a3324f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = 'cfebe176-0a64-428d-b0ec-bba454d2ca3e'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = 'd80c3689-7e0a-45ac-801d-91d199c08bd5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = 'e6c36792-763d-44f8-8afe-157c8f158ef8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6457580f-aa4c-49d8-a92e-a9255e3dac34"/> + <where>AB_KEYWORD_ENTRYID = '7abf7fc5-08a1-4bae-b0ca-ec5e406d154c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ENTRYID = '2acd3694-ccef-4d0b-ae7a-b3d31f8d9cc0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ENTRYID = 'cb07397b-a976-4960-b8e5-9edf189c5caf'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ENTRYID = '990a03e0-aeb4-4bdb-9d22-09b66eee6b85'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ENTRYID = '51085b8b-ded0-4d1d-9e85-ae89bd1480fe'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <where>AB_KEYWORD_ENTRYID = 'b72ba2f5-612b-4ef6-832e-62089892b8d7'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <where>AB_KEYWORD_ENTRYID = '49bb6904-dd20-4ede-aaff-ae80131ed274'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <where>AB_KEYWORD_ENTRYID = '5213a48a-b6d2-47ee-8409-a4af7477535f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <where>AB_KEYWORD_ENTRYID = '045d0567-4535-4d22-84f2-95b3b0e23000'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f700fd2-5295-43a9-95ad-e73add4b5086"/> + <where>AB_KEYWORD_ENTRYID = 'e62da2f2-6352-4660-b2ff-1e8a552d298a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <where>AB_KEYWORD_ENTRYID = '115495eb-dff4-436d-8114-b9a7644586bf'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <where>AB_KEYWORD_ENTRYID = '9212a797-4470-4170-b4d1-330a5d991625'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <where>AB_KEYWORD_ENTRYID = '1f857be1-7de0-479f-bac8-59b22d48fe39'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <where>AB_KEYWORD_ENTRYID = '19997ffa-bfe3-4f6a-82f8-e862acb24655'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <where>AB_KEYWORD_ENTRYID = 'd8e2cc64-cc61-440e-b0fc-3d5b45d75ba0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = 'b42caac9-8f8f-46e5-9f1c-d121cdf3ad8f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = '8a2d19c9-bc32-437e-9261-78ed30110e92'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = '46f55a58-dbe4-40ae-9306-481df9095088'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = 'afa8cf58-07e8-4ee9-b24e-96cb6fa76aec'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = 'c9483fb9-c295-43d2-94e0-8c949cf6dc47'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = '0e8eab64-4c79-4eed-9746-0ac6fc397620'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = '405e2b7b-20c2-4824-a8b5-c7a533784ef3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec9ac6e2-d2de-4e8e-bfad-bebd38c65026"/> + <where>AB_KEYWORD_ENTRYID = '97ec9a7e-a1dd-4167-bf7d-57ee3d79d46f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec9ac6e2-d2de-4e8e-bfad-bebd38c65026"/> + <where>AB_KEYWORD_ENTRYID = '798c1720-901e-4eae-bab3-80f334830601'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec9ac6e2-d2de-4e8e-bfad-bebd38c65026"/> + <where>AB_KEYWORD_ENTRYID = '53a01187-5306-4980-8c40-153e910dd115'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec9ac6e2-d2de-4e8e-bfad-bebd38c65026"/> + <where>AB_KEYWORD_ENTRYID = '3d17defd-5b6e-4e19-816c-f9a19aca3cc0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5f94376f-18bb-41d5-8be7-f7dce020495c"/> + <where>AB_KEYWORD_ENTRYID = '9887b380-8e6a-4fab-a99c-46172cb9ecc5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5f94376f-18bb-41d5-8be7-f7dce020495c"/> + <where>AB_KEYWORD_ENTRYID = 'c228d007-5f1b-41a9-baaf-4bac444e2d63'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5f94376f-18bb-41d5-8be7-f7dce020495c"/> + <where>AB_KEYWORD_ENTRYID = '9c24af78-bb51-4706-ae3c-35f450fc4034'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5f94376f-18bb-41d5-8be7-f7dce020495c"/> + <where>AB_KEYWORD_ENTRYID = '612acb5c-9cde-4229-8910-6ca6eb7bed8c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5f94376f-18bb-41d5-8be7-f7dce020495c"/> + <where>AB_KEYWORD_ENTRYID = '711db73d-eed2-43a6-ac57-a608a831eb8d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <where>AB_KEYWORD_ENTRYID = '6a26d9c5-bc21-455e-828a-26e1b9b278da'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <where>AB_KEYWORD_ENTRYID = '946b9f7d-c667-47a2-90f4-57935347aac5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <where>AB_KEYWORD_ENTRYID = '81a8a308-46e1-4cf6-8383-15736e45219c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <where>AB_KEYWORD_ENTRYID = 'f4bcb779-ea53-4ad6-bbcd-8681a3813a4c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <where>AB_KEYWORD_ENTRYID = '47272e85-ae18-4bd6-950f-449bc531c5c5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8bf2b609-b422-401f-a6c5-7c07107cbb87"/> + <where>AB_KEYWORD_ENTRYID = 'c046313e-d7af-4440-a3c1-0cdf2b6220ca'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '9d2f9605-1a5e-47d3-8920-168f5637e37f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = 'ee893a1c-d007-46fe-a190-727124c4467b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '191d7293-3b3f-4dc7-bbe2-9da1a897f7df'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '00a61337-d3d3-4e7e-bc48-cb08cabe01b3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ab8d06bb-18eb-4fbe-9e00-ecb34bd38c8f"/> + <where>AB_KEYWORD_ENTRYID = 'b8409c4a-6447-408a-bd06-dfe67054a4f1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ab8d06bb-18eb-4fbe-9e00-ecb34bd38c8f"/> + <where>AB_KEYWORD_ENTRYID = 'edba1a8f-766b-4dfa-9360-1a2aca8569d6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ab8d06bb-18eb-4fbe-9e00-ecb34bd38c8f"/> + <where>AB_KEYWORD_ENTRYID = 'ed1b3d39-9cab-4c3c-84c5-438a8b67be53'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="58ff4cea-10b7-4cf9-b326-81337b5ddd48"/> + <where>AB_KEYWORD_ENTRYID = '9509c6b8-208a-4e97-bdcd-53642d0c7489'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="58ff4cea-10b7-4cf9-b326-81337b5ddd48"/> + <where>AB_KEYWORD_ENTRYID = 'd713c45a-6f87-4516-ae21-1d8f1c217949'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="58ff4cea-10b7-4cf9-b326-81337b5ddd48"/> + <where>AB_KEYWORD_ENTRYID = '410a389b-67d4-4155-8d9e-1e8d816ecfb9'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="db283e25-904d-41cb-ac20-3c80c85fa423"/> + <where>AB_KEYWORD_ENTRYID = 'eadf3ecb-ac35-4a94-879a-f6e85a72fa29'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="db283e25-904d-41cb-ac20-3c80c85fa423"/> + <where>AB_KEYWORD_ENTRYID = '4dcc3315-8a38-42d9-ba34-f8899b86ca85'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <where>AB_KEYWORD_ENTRYID = '028af5dd-1071-4108-8685-ed7124376706'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda5deac-5b7c-4c98-9904-2eb3b224235d"/> + <where>AB_KEYWORD_ENTRYID = '75bd97bc-56f3-4ea3-a132-df3cb9cda071'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda5deac-5b7c-4c98-9904-2eb3b224235d"/> + <where>AB_KEYWORD_ENTRYID = '6e30d397-e31f-4ccb-96e9-51cf71d259fa'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda5deac-5b7c-4c98-9904-2eb3b224235d"/> + <where>AB_KEYWORD_ENTRYID = '722e83bc-148a-4762-abda-d491bf590bd5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda5deac-5b7c-4c98-9904-2eb3b224235d"/> + <where>AB_KEYWORD_ENTRYID = '191617b2-09cc-4fe6-bc02-1cee746285d5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda5deac-5b7c-4c98-9904-2eb3b224235d"/> + <where>AB_KEYWORD_ENTRYID = '87f97554-c335-4328-911a-345d8a9abd7d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '767b89c6-2461-4d0e-9b7a-dda33e5090c9'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '2fa7cddb-1e2c-438f-8f16-92f245af09f4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '67ea4d33-b683-4a04-b2e3-4af54d6debcb'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = 'd7be200e-ffc0-47a7-b0bb-3da92f39b993'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '3b836d42-9ecf-49b9-8df9-570c27860c01'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '2a4e6516-8493-4dde-a9df-bf2efd4db0c8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '3e7f2a42-ad8b-48da-aa11-95525ca36d01'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="866fd65f-131c-4038-99ce-78606971ec98"/> + <where>AB_KEYWORD_ENTRYID = '11c05d41-78ec-4d7c-acbe-f94912f2386c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="bfc9eb87-0292-4fa1-9c87-39666c2ae6d2"/> + <where>AB_KEYWORD_ENTRYID = 'ba369295-c717-48eb-ae76-314087375e06'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="bfc9eb87-0292-4fa1-9c87-39666c2ae6d2"/> + <where>AB_KEYWORD_ENTRYID = 'dcacb175-4c8a-4941-a417-69a971f52583'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="bfc9eb87-0292-4fa1-9c87-39666c2ae6d2"/> + <where>AB_KEYWORD_ENTRYID = '1a508899-e2bf-409d-8a57-3ca31c9c832d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <where>AB_KEYWORD_ENTRYID = '3c734077-8677-4732-86ef-7df01d9646b3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c0448b78-0e78-4db6-895e-5d0d9952f961"/> + <where>AB_KEYWORD_ENTRYID = 'b0123a07-0d21-4365-9aa2-c8be18c56141'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b5afd40b-bfa7-4aee-89ea-06b8c7deb304"/> + <where>AB_KEYWORD_ENTRYID = 'c564719a-18ef-423e-b130-dp88b2b518ad'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b5afd40b-bfa7-4aee-89ea-06b8c7deb304"/> + <where>AB_KEYWORD_ENTRYID = '6f4c6e49-36ca-4b98-ba83-c507203wawal'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b5afd40b-bfa7-4aee-89ea-06b8c7deb304"/> + <where>AB_KEYWORD_ENTRYID = 'bb386131-ee36-9771-b458-6751f137a941'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b5afd40b-bfa7-4aee-89ea-06b8c7deb304"/> + <where>AB_KEYWORD_ENTRYID = 'bb38aa51-ee36-9771-b458-6751f137a941'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = 'c564719a-18ef-423e-b130-dp88b2b51123'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = '6f4c6e49-36ca-4b98-ba83-c507203wa456'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = 'bb386131-ee36-9771-b458-6751f137a789'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = 'bb38aa51-ee36-9771-b458-6751f137a999'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = 'beb7691f-ff9e-4344-89e1-d2664f7384e0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = '267d1707-99db-40fa-914a-e36ba22e3ad6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="43bffa8e-581a-4854-917b-c75e9119921f"/> + <where>AB_KEYWORD_ENTRYID = '8d95cad1-3ab2-4b6c-9b38-064cb914216d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="43bffa8e-581a-4854-917b-c75e9119921f"/> + <where>AB_KEYWORD_ENTRYID = '3e5036a1-43a1-4bb1-ad56-ed42df7c9538'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="43bffa8e-581a-4854-917b-c75e9119921f"/> + <where>AB_KEYWORD_ENTRYID = '0759da45-5a5b-4163-a3a1-6a19f5a196c5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="59790e82-72d4-4682-8e4d-df93ccb35c64"/> + <where>AB_KEYWORD_ENTRYID = '0dc9b27b-56d8-4650-92ee-bf85a3c67cb3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="59790e82-72d4-4682-8e4d-df93ccb35c64"/> + <where>AB_KEYWORD_ENTRYID = 'b1f5ea38-1b8c-47a8-a8ad-4c6ed9c26cda'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="59790e82-72d4-4682-8e4d-df93ccb35c64"/> + <where>AB_KEYWORD_ENTRYID = '98f4cab1-74b8-4a23-a99a-c3624711beab'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="9e2ad22e-be5f-4f11-b273-42d7d7b5f946"/> + <where>AB_KEYWORD_ENTRYID = '62cb479d-70b2-4cb4-91f5-5d1352f2131b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="9e2ad22e-be5f-4f11-b273-42d7d7b5f946"/> + <where>AB_KEYWORD_ENTRYID = '73b34a7c-5921-461c-8cf5-17e3aba01bd0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="9e2ad22e-be5f-4f11-b273-42d7d7b5f946"/> + <where>AB_KEYWORD_ENTRYID = '7ef45db6-9151-45da-adb9-8e7759390ecd'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0e8217d7-6712-4c16-80d4-d5c9c26a4f47"/> + <where>AB_KEYWORD_ENTRYID = '789667fe-519f-4dea-b691-62c14447d694'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = '7ac75d3d-243c-49d2-9f50-25403fab003a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = '2b9c1bdf-b0bb-447d-a57d-e369cf475fca'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="83ea3621-22d8-403b-a73e-5d63a6dee434"/> + <where>AB_KEYWORD_ENTRYID = '45438bcf-74cf-408f-bc4d-5d70595369c8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8653e732-0a48-4697-a858-ce58a524553c"/> + <where>AB_KEYWORD_ENTRYID = '676f498f-3f51-459f-8e07-feec7b604245'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8653e732-0a48-4697-a858-ce58a524553c"/> + <where>AB_KEYWORD_ENTRYID = '14f5e2a4-4998-400f-b857-90e14e8736da'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8653e732-0a48-4697-a858-ce58a524553c"/> + <where>AB_KEYWORD_ENTRYID = 'd3ae8077-36db-4f52-8f90-b0ebbb6773d7'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dc580c6b-6748-4eea-97fa-9a08776e395f"/> + <where>AB_KEYWORD_ENTRYID = '27ded05a-99c1-4810-91ee-cbb1e4ddec85'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dc580c6b-6748-4eea-97fa-9a08776e395f"/> + <where>AB_KEYWORD_ENTRYID = '4409adc1-0130-44d3-8aa9-773ff3ab0816'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c1295c26-c580-42b8-85dc-6c08811c812c"/> + <where>AB_KEYWORD_ENTRYID = 'f3c4cf95-edb6-4637-9186-9ba25ebf927d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '0b06db5c-1d00-4d01-b8a9-f280a4f69cbc'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '1061168a-4b17-4ba5-be70-948c0dd78f20'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '890a7832-f06f-4e51-8744-73aa8ddea4f8'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = 'a5b50ba3-0fb9-4fbe-9e98-4d6c53b329af'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '9d4cdd61-9f6a-46e1-bef0-eaf16613aea5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6818d2a6-f47a-4d72-a0b2-3fc6fc74fb27"/> + <where>AB_KEYWORD_ENTRYID = '2f742253-c287-40ab-838f-ec797a16fdce'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="bb351e6a-c35b-4af6-8540-898b2cd368a4"/> + <where>AB_KEYWORD_ENTRYID = '2ef84e0e-988a-44b4-9d14-3461555d2f18'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f3986324-87ce-485f-8688-c4e228c39fc6"/> + <where>AB_KEYWORD_ENTRYID = '98075159-ecc2-4851-a971-6f3123a495d3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="25cb446a-24cd-4ebd-aad2-320da20830da"/> + <where>AB_KEYWORD_ENTRYID = '2710c44b-73a7-4da5-b828-c7ac572ab79c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="25cb446a-24cd-4ebd-aad2-320da20830da"/> + <where>AB_KEYWORD_ENTRYID = '82d04090-3ef1-4eaf-9836-0490733a078f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="25cb446a-24cd-4ebd-aad2-320da20830da"/> + <where>AB_KEYWORD_ENTRYID = 'd1d6a461-1bbf-4f03-ac99-33a2d38a36e3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <where>AB_KEYWORD_ENTRYID = '6e95db61-6991-41c8-b2bb-e2b39c38efa3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <where>AB_KEYWORD_ENTRYID = '250e5cd6-1842-46b1-b968-03988255eaba'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <where>AB_KEYWORD_ENTRYID = 'ec51253e-9b45-468d-aafa-42331e54f32b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c561d74a-44dc-4b57-acad-055f0f557b6f"/> + <where>AB_KEYWORD_ENTRYID = 'b189770f-f36f-4256-b1c9-866010a6aa95'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c561d74a-44dc-4b57-acad-055f0f557b6f"/> + <where>AB_KEYWORD_ENTRYID = '0ecc8e3d-2ff7-40fa-84be-d45988d32ae7'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0369f43a-e46d-42f7-bfe3-5bc2c7d9d584"/> + <where>AB_KEYWORD_ENTRYID = '5c745e67-6ceb-4dde-9c98-0ff6102fff5a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0369f43a-e46d-42f7-bfe3-5bc2c7d9d584"/> + <where>AB_KEYWORD_ENTRYID = 'd1c5d5bf-5ce5-4a9a-a5ec-4a7dabd6cf0a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0369f43a-e46d-42f7-bfe3-5bc2c7d9d584"/> + <where>AB_KEYWORD_ENTRYID = '82fe63e7-14fd-4c07-94fb-6dd05058e570'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + <where>AB_KEYWORD_ENTRYID = 'e72a7d5b-7608-4c87-a977-d4a8994e45b4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + <where>AB_KEYWORD_ENTRYID = 'c38a3169-63f8-41f7-88a7-3358b2519a4a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + <where>AB_KEYWORD_ENTRYID = 'ffb1a706-348c-42cd-8b13-6f5e74181ba3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + <where>AB_KEYWORD_ENTRYID = 'a64796f6-e2b7-4c36-b9da-13df09d9ffed'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + <where>AB_KEYWORD_ENTRYID = '3d0af900-1ab6-4725-bf39-b80581d3907f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3d8699cb-e0a0-483a-b52d-d5bdfe2ed336"/> + <where>AB_KEYWORD_ENTRYID = 'dd955f03-a36d-4217-9449-aa05dcc1e51a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3d8699cb-e0a0-483a-b52d-d5bdfe2ed336"/> + <where>AB_KEYWORD_ENTRYID = '6d361b4d-5cc6-48eb-83ee-4a8573ad466a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3d8699cb-e0a0-483a-b52d-d5bdfe2ed336"/> + <where>AB_KEYWORD_ENTRYID = '32f48ab8-691e-49e6-951b-be088e7c60ff'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e22ca44f-5d2d-47b6-a844-6801fb6b877f"/> + <where>AB_KEYWORD_ENTRYID = 'd5b80d62-9c28-4267-ad46-da6bdc021c28'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e22ca44f-5d2d-47b6-a844-6801fb6b877f"/> + <where>AB_KEYWORD_ENTRYID = '0914014a-1b85-49dc-9d12-4fcb3ebb6e4a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e22ca44f-5d2d-47b6-a844-6801fb6b877f"/> + <where>AB_KEYWORD_ENTRYID = '5c94a850-4025-4981-b6bf-0eda7680c820'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="598681d4-5649-4a9d-b918-f35fd69a2b0f"/> + <where>AB_KEYWORD_ENTRYID = 'ace4957a-fff8-4137-9670-a66dafd95f6f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="598681d4-5649-4a9d-b918-f35fd69a2b0f"/> + <where>AB_KEYWORD_ENTRYID = 'd0ff5f49-00ee-40c1-ac24-ee52d72590cd'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5a49ccc0-bf6b-4842-81d9-78d8841c66a2"/> + <where>AB_KEYWORD_ENTRYID = 'a33d4ac6-0aa4-4f43-9d9f-b096cd49bd6f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="5a49ccc0-bf6b-4842-81d9-78d8841c66a2"/> + <where>AB_KEYWORD_ENTRYID = '3225b41e-43e1-4e5d-bfdd-1c595d1a5610'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="288cd7a1-3cdb-43bc-8832-ffb58e651956"/> + <where>AB_KEYWORD_ENTRYID = '538d03cc-8535-474a-bf16-05e654815863'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="288cd7a1-3cdb-43bc-8832-ffb58e651956"/> + <where>AB_KEYWORD_ENTRYID = 'c3c66fa1-185e-40c5-8ff7-3e7b02466ed1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="50ecc8e7-15e3-4a40-8028-d6de5241b88e"/> + <where>AB_KEYWORD_ENTRYID = '678f61e5-ef27-4e1c-b52b-0e19188b038d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="50ecc8e7-15e3-4a40-8028-d6de5241b88e"/> + <where>AB_KEYWORD_ENTRYID = 'f568c222-7ac5-475e-b916-cea0e0e8612a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="50ecc8e7-15e3-4a40-8028-d6de5241b88e"/> + <where>AB_KEYWORD_ENTRYID = 'b5f402a0-29a0-43e9-8db3-454fdbcfc9d1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="50ecc8e7-15e3-4a40-8028-d6de5241b88e"/> + <where>AB_KEYWORD_ENTRYID = '1c40a2de-e6c1-469b-b324-d7089893ca5c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dbd944bc-0c18-4acc-b4da-2cf382309459"/> + <where>AB_KEYWORD_ENTRYID = '0fdcfc0f-ba82-4881-813d-9f169339ab57'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dbd944bc-0c18-4acc-b4da-2cf382309459"/> + <where>AB_KEYWORD_ENTRYID = '6aaddcc6-a94e-4267-a52e-f0dd1df62023'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dbd944bc-0c18-4acc-b4da-2cf382309459"/> + <where>AB_KEYWORD_ENTRYID = '1290323b-82d4-4f34-95d7-44c453eef3bb'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dbd944bc-0c18-4acc-b4da-2cf382309459"/> + <where>AB_KEYWORD_ENTRYID = '6f35ab82-7905-472a-b635-954bd5fac1e5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="dbd944bc-0c18-4acc-b4da-2cf382309459"/> + <where>AB_KEYWORD_ENTRYID = 'faa99798-c68f-435a-95d5-77bcd2bbabef'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="38df36cd-2600-4397-a272-0defa1e79e5c"/> + <where>AB_KEYWORD_ENTRYID = '5e5524d7-c8be-4bd2-b9cf-1974d8c7a2f5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="38df36cd-2600-4397-a272-0defa1e79e5c"/> + <where>AB_KEYWORD_ENTRYID = '9882b909-b952-4f47-ac63-bb49f8c8eb6a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="38df36cd-2600-4397-a272-0defa1e79e5c"/> + <where>AB_KEYWORD_ENTRYID = '383aa333-cc14-4ea5-9baf-23aaa7d7ec4e'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="38df36cd-2600-4397-a272-0defa1e79e5c"/> + <where>AB_KEYWORD_ENTRYID = '0d9eab1f-8e07-4b0d-a92b-bdc6a5b3bd18'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="38df36cd-2600-4397-a272-0defa1e79e5c"/> + <where>AB_KEYWORD_ENTRYID = '18abd018-4eb4-44ae-b0c0-0e63ad6286b1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c4c05b5-8294-441f-84d4-3424f1c38732"/> + <where>AB_KEYWORD_ENTRYID = 'b5087465-4a80-4f2e-8515-7598fea11f56'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0c4c05b5-8294-441f-84d4-3424f1c38732"/> + <where>AB_KEYWORD_ENTRYID = '460f37dd-2589-499f-89be-7184ff5e0c8a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="63530dfc-c3e6-447b-b3ed-b52adae42a68"/> + <where>AB_KEYWORD_ENTRYID = '8898350e-fd68-45b5-97d6-618d867e53b7'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="63530dfc-c3e6-447b-b3ed-b52adae42a68"/> + <where>AB_KEYWORD_ENTRYID = 'f2fb362a-97d3-4c1d-8496-20abc99973ec'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ad91fa20-157b-4e57-b9ad-1281e40024b3"/> + <where>AB_KEYWORD_ENTRYID = '49dc7423-21c7-47b1-ac1e-b01e8eb5c822'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e685dcfe-cbf9-4a3f-b45f-3f449779a48f"/> + <where>AB_KEYWORD_ENTRYID = 'a18e7a37-c5f6-4f7b-8db6-3018dedbd43f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e685dcfe-cbf9-4a3f-b45f-3f449779a48f"/> + <where>AB_KEYWORD_ENTRYID = '9f11c52f-4c79-4027-877a-0f6eb828fa22'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e23c8316-d43a-4606-803e-d4488823cc52"/> + <where>AB_KEYWORD_ENTRYID = '0d30ed22-bb79-450a-a027-6786e7bb6028'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="35d717d5-4260-4a33-8183-a430e3624822"/> + <where>AB_KEYWORD_ENTRYID = '50b50394-6d77-4ded-a76c-1e07c08bbdcb'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="35d717d5-4260-4a33-8183-a430e3624822"/> + <where>AB_KEYWORD_ENTRYID = '4c851554-2cef-4e0d-823b-bf225b084964'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="35d717d5-4260-4a33-8183-a430e3624822"/> + <where>AB_KEYWORD_ENTRYID = '3c075444-1ded-4fbd-8095-e3a71ade1f44'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '0a3970d9-c08e-48f2-97b7-8b62bd2df79a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '305a6c15-9fb8-46f0-8855-cfcf3ac1fbe7'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '4bec1be3-13c4-42d8-9e88-a351fdddf5ba'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '102ddb10-a355-4487-9478-33d816eaff7a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '0bf9fd30-8e88-460b-bbcd-fcc8b66c1a95'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'eeb1b0db-af21-4318-8517-ced5eaad8476'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '480de65f-73e8-4108-af2e-009b442613b0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '9df3b34f-8b63-4360-bb56-8be43c689db6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '8579a002-c7f4-4755-ab06-4011ac659760'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '64c307b5-9794-4671-b0ff-ce483ec2e604'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '6ace6e7c-6a9f-44d8-9cca-67ce7dad2aee'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'da3acc3a-457e-4c88-a477-8abdaf819539'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '2e7952b1-56a8-484d-9d82-564236c30d20'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '96534736-0247-4596-a8db-f6d7eee611c5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '9ed26d58-cc2f-436e-b67b-afbb9f102bf4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '52bad941-02be-4c63-94a7-979e8ecef0c9'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '8bf354dc-4278-493e-9824-40367382290f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '97e27378-e733-4629-b0c4-515faf89da7e'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'bc4e4390-e1b9-4054-8ffd-6fd7b1b5096a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '2aec9eed-a4f2-473a-8ae0-563706eb6cd4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '9e2da66c-380c-40a4-9104-722015ff4b70'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '019fcac3-4eb2-45ff-a936-c59da4a2da04'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'a4872b5e-8b41-4b93-a663-fd7aa748b3a7'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'c92b180a-a7d7-4c0c-8fbb-ce8abcd5214d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '6164631f-3378-412d-8c80-8be0aaca7c77'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '6164631f-3378-412d-8c80-8be0aaca7c65'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8ef58a64-8905-4d5d-b965-40c7e12a0b1e"/> + <where>AB_KEYWORD_ENTRYID = '81fdc4ce-b45c-4481-b9cc-77f69a46a465'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8ef58a64-8905-4d5d-b965-40c7e12a0b1e"/> + <where>AB_KEYWORD_ENTRYID = '31a341e0-fce1-4efe-be3f-611166ad83be'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8ef58a64-8905-4d5d-b965-40c7e12a0b1e"/> + <where>AB_KEYWORD_ENTRYID = 'dc700194-78c3-4a34-a196-4f0d8e19f0d5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="8ef58a64-8905-4d5d-b965-40c7e12a0b1e"/> + <where>AB_KEYWORD_ENTRYID = '5dd157b1-19e4-4b76-8483-b9eb53fa71eb'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="380983a1-f0b2-4d0b-b38b-5c889079e414"/> + <where>AB_KEYWORD_ENTRYID = 'c823c666-ca18-4795-9f2d-d9dbfb7d4028'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="380983a1-f0b2-4d0b-b38b-5c889079e414"/> + <where>AB_KEYWORD_ENTRYID = '30b9c5d2-0aa2-489d-8746-ddb53d6e235d'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="380983a1-f0b2-4d0b-b38b-5c889079e414"/> + <where>AB_KEYWORD_ENTRYID = '5101860e-84c9-49ae-8947-383c0c819090'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="380983a1-f0b2-4d0b-b38b-5c889079e414"/> + <where>AB_KEYWORD_ENTRYID = 'b72d5352-7de0-4d54-89db-c4e2e87352c9'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <where>AB_KEYWORD_ENTRYID = '56e9b1a8-2ccd-4a48-8563-70d31ac108cf'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ENTRYID = '5506389d-b2ba-4774-9fa0-8e68f95816a0'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <where>AB_KEYWORD_ENTRYID = 'ddb8d043-f207-41b8-987c-7f539eb5c2eb'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ed197cdf-bdd1-4e95-b910-dca348abf3be"/> + <where>AB_KEYWORD_ENTRYID = '78367cf3-111a-4852-9a4f-a505ad2953cd'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ed197cdf-bdd1-4e95-b910-dca348abf3be"/> + <where>AB_KEYWORD_ENTRYID = '94cc11ec-a384-439f-b5c7-70d7168959a5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ed197cdf-bdd1-4e95-b910-dca348abf3be"/> + <where>AB_KEYWORD_ENTRYID = 'd8b78606-30bf-4633-9aaf-4da691ef6d8f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '579e1798-acd0-4fa6-8dbc-02c533e741f3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = 'f472f6f9-d603-42d3-a413-6b549f4c2aa4'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = 'de02cd0d-b3ab-43e0-ae2f-f1b76e2323d1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '012f38fa-c7ee-4898-bed5-4652459dab23'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '4b9e19fb-0385-4033-8a03-6d37c43c6b01'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '7e5ab737-a3e6-463c-974e-eb6021730d4a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '5e46546a-ee2e-41a2-b87f-a55e4c88df87'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = 'ab66f18f-040d-44c1-b08c-949fa3928e37'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '4eba5820-4c2d-4a77-95d2-c6f12843d02c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '7fff1c17-66a0-44ec-a6f1-f0364602c0de'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '7a32adf8-13ac-4943-a443-4d2f5340a8a5'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '22c13c1e-1c26-42b6-8e24-c522ec7f16a9'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '50cb1b5f-2215-40e8-aa1e-daf34dc8a06b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = 'f7f73dec-b461-4bb4-8d72-4cb63909dbba'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = 'bd4300ce-8e9b-4efc-b995-8477ab374fc3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="c03a5abe-0f21-41a3-8506-9b13db7ea407"/> + <where>AB_KEYWORD_ENTRYID = '5534a8d8-da1d-4448-835a-97cdcfee8907'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="30d87734-9229-460d-abf4-73ce73466534"/> + <where>AB_KEYWORD_ENTRYID = '9d427420-2c87-4ada-9349-a799972bda0f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="30d87734-9229-460d-abf4-73ce73466534"/> + <where>AB_KEYWORD_ENTRYID = '2f740f93-12ed-4e22-a158-adba5da81b40'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="30d87734-9229-460d-abf4-73ce73466534"/> + <where>AB_KEYWORD_ENTRYID = 'dd276100-b867-489c-8128-a3b71aa7564f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7147c61b-962d-426c-84a2-aaa381aeab8b"/> + <where>AB_KEYWORD_ENTRYID = '91d7417e-fd45-429e-9ce9-a46f25c0c1d1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7147c61b-962d-426c-84a2-aaa381aeab8b"/> + <where>AB_KEYWORD_ENTRYID = 'c0147b73-f678-4136-b3c4-0fde7e943a84'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7147c61b-962d-426c-84a2-aaa381aeab8b"/> + <where>AB_KEYWORD_ENTRYID = '4ac4c7e1-d73b-4a26-9a6d-bc06505b9611'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7147c61b-962d-426c-84a2-aaa381aeab8b"/> + <where>AB_KEYWORD_ENTRYID = 'facb77a6-5bc1-4e2f-8dd0-72200b57c326'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="7147c61b-962d-426c-84a2-aaa381aeab8b"/> + <where>AB_KEYWORD_ENTRYID = '036cbf6f-a8bd-4f25-b885-f1a689927bf1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f0abc80c-7d9d-4bb5-8d41-d204550a028e"/> + <where>AB_KEYWORD_ENTRYID = '17905c4d-1c88-4cee-83da-164c13bbe848'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f0abc80c-7d9d-4bb5-8d41-d204550a028e"/> + <where>AB_KEYWORD_ENTRYID = '2f162837-868a-4517-810e-677cd423be56'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e35fdba2-11ba-4d8c-b443-5ab49a19dcc1"/> + <where>AB_KEYWORD_ENTRYID = 'b6618b25-ec10-413f-9048-a5d8e792d161'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="e35fdba2-11ba-4d8c-b443-5ab49a19dcc1"/> + <where>AB_KEYWORD_ENTRYID = '45738bd4-1d7f-46b1-a863-93d183bbd238'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ecfee92f-0563-44be-98f5-1c304df8d9d0"/> + <where>AB_KEYWORD_ENTRYID = 'f241b36a-c2fe-40be-9e2e-8293c700d096'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="ecfee92f-0563-44be-98f5-1c304df8d9d0"/> + <where>AB_KEYWORD_ENTRYID = '00a72718-554e-46ab-b83c-fb9b81be4be6'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="50ecc8e7-15e3-4a40-8028-d6de5241b88e"/> + <where>AB_KEYWORD_ENTRYID = 'daa6d8d8-fdc6-4fb2-9677-9ccc1f8a9b81'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="b3765719-9d07-41c4-a813-18bc9056db1a"/> + <where>AB_KEYWORD_ENTRYID = '66d1563a-a76c-47ca-af6b-38586a2f3ce3'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="0e8217d7-6712-4c16-80d4-d5c9c26a4f47"/> + <where>AB_KEYWORD_ENTRYID = 'e36f44a3-88b6-4b1d-a77a-0108b8165b9b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '8c24ac4a-23cc-4a16-98a0-362e72b77977'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'cb227318-924a-4df4-af98-eb6814ce21a1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'b1cdbbda-5181-4dbd-b786-4d180c1248aa'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'dd5abf99-b43d-4b3d-b4b0-376c70572490'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '345fe723-73dc-4687-afd2-c4ebc16aebdc'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '370672a7-946a-43b6-98dd-532422bef388'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '01f18fd8-44c1-43ec-8601-bf1fe7e62700'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '504d48d1-1a0d-437a-adc9-38501679137a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = 'fde1a4d1-d77e-494c-a1e4-2ef82abec246'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f2cc6b40-1c1c-4207-93a3-0e225e2630c7"/> + <where>AB_KEYWORD_ENTRYID = '53e06704-e28d-49b5-a49f-e40ca250ee6a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f118b0c3-c65f-4c83-8f5a-cb885fa3323a"/> + <where>AB_KEYWORD_ENTRYID = 'DISCUSSIONACTIVE '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="f118b0c3-c65f-4c83-8f5a-cb885fa3323a"/> + <where>AB_KEYWORD_ENTRYID = 'DISCUSSIONCLOSED '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6a4a5250-6231-4bf7-8c16-bb5994c4e2d0"/> + <where>AB_KEYWORD_ENTRYID = 'KNOWLEDGEBASE '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="6a4a5250-6231-4bf7-8c16-bb5994c4e2d0"/> + <where>AB_KEYWORD_ENTRYID = 'EDITORIAL '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="37f65755-e1c9-4912-a7d3-2922c754ed8d"/> + <where>AB_KEYWORD_ENTRYID = 'INTERNAL '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="37f65755-e1c9-4912-a7d3-2922c754ed8d"/> + <where>AB_KEYWORD_ENTRYID = 'PARTNER '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="37f65755-e1c9-4912-a7d3-2922c754ed8d"/> + <where>AB_KEYWORD_ENTRYID = 'PUBLIC '</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="623bdc81-a99b-4865-958e-85abd0ed9b6a"/> + <where>AB_KEYWORD_ENTRYID = '70f352e7-81dc-4d44-9f12-30bfc2cc39f1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="623bdc81-a99b-4865-958e-85abd0ed9b6a"/> + <where>AB_KEYWORD_ENTRYID = '1b6b5070-8028-42f9-abfd-ee64142801d1'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="9d1cb7d0-931e-4d5c-a54f-e5c917228157"/> + <where>AB_KEYWORD_ENTRYID = '9531f6ba-dbbc-43c2-ba7a-761c6e44ca3b'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="9d1cb7d0-931e-4d5c-a54f-e5c917228157"/> + <where>AB_KEYWORD_ENTRYID = 'b063bd18-0f60-4e5f-b153-62acb984a4b2'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <where>AB_KEYWORD_ENTRYID = '97c73c26-c90e-410b-8732-47cbeaf986df'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <where>AB_KEYWORD_ENTRYID = '8d853c34-0896-45db-989d-131a15bd0c6a'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <where>AB_KEYWORD_ENTRYID = '40212bc7-df71-4131-965b-344e6baf7c57'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <where>AB_KEYWORD_ENTRYID = 'df052065-a32d-4c17-a229-60abcaf2736f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <where>AB_KEYWORD_ENTRYID = '3b080d0e-9301-47f2-9ead-10f2b5aaf701'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="1fa14f21-6aad-4bea-9106-7265db39e052"/> + <where>AB_KEYWORD_ENTRYID = 'a343cbe0-af9c-464c-861e-65f00eab392f'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="14adf8de-aa3a-4c89-99bd-49477c2fa8a6"/> + <where>AB_KEYWORD_ENTRYID = '264b8a1c-45c8-4b41-9d11-4b6fb538b79c'</where> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" value="14adf8de-aa3a-4c89-99bd-49477c2fa8a6"/> + <where>AB_KEYWORD_ENTRYID = '0af9044d-6eeb-4db0-be95-91e63a30aa19'</where> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.0/Keywords/add_keywordCategory.xml b/.liquibase/Data_alias/basic/2021.0.0/Keywords/add_keywordCategory.xml new file mode 100644 index 0000000000000000000000000000000000000000..4ba2d4ae0fc3b21ee08afe99dbea8a804e6cd114 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/Keywords/add_keywordCategory.xml @@ -0,0 +1,20 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="t.lutzenberger" id="d0da3801-e570-40ab-97ec-9f7946f7229c"> + <createTable tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_KEYWORDCATEGORY_KEYWORDCATEGORYID"/> + </column> + <column name="NAME" type="VARCHAR(80)"> + <constraints nullable="false"/> + </column> + <column name="SORTINGBY" type="INTEGER"> + <constraints nullable="false"/> + </column> + <column name="SORTINGDIRECTION" type="VARCHAR(4)"> + <constraints nullable="false"/> + </column> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.0/Keywords/changelog.xml b/.liquibase/Data_alias/basic/2021.0.0/Keywords/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..f7518d51df313cea8d5a12e4842c467033466ffe --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/Keywords/changelog.xml @@ -0,0 +1,7 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="add_keywordCategory.xml"/> + <include relativeToChangelogFile="true" file="update_keywordEntry.xml"/> + <include relativeToChangelogFile="true" file="update_keywordAttribute.xml"/> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.0/Keywords/update_keywordAttribute.xml b/.liquibase/Data_alias/basic/2021.0.0/Keywords/update_keywordAttribute.xml new file mode 100644 index 0000000000000000000000000000000000000000..b75f38f1225374b99e81ef181f0836cb864d1bd8 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/Keywords/update_keywordAttribute.xml @@ -0,0 +1,12 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="t.lutzenberger" id="a3c9ffe8-f7e0-4924-856a-73ecea202750"> + <addColumn tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_CATEGORY_ID" type="CHAR(36)" /> + </addColumn> + <dropNotNullConstraint tableName="AB_KEYWORD_ATTRIBUTE" + columnName="CONTAINER" + columnDataType="VARCHAR(80)"/> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.0/Keywords/update_keywordEntry.xml b/.liquibase/Data_alias/basic/2021.0.0/Keywords/update_keywordEntry.xml new file mode 100644 index 0000000000000000000000000000000000000000..e45e792dbb96364b3b15a05be548452110001a70 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/Keywords/update_keywordEntry.xml @@ -0,0 +1,12 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="t.lutzenberger" id="58652a09-7d8e-4a9d-995e-04eb8bcbc7cf"> + <addColumn tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_CATEGORY_ID" type="CHAR(36)"/> + </addColumn> + <dropNotNullConstraint tableName="AB_KEYWORD_ENTRY" + columnName="CONTAINER" + columnDataType="VARCHAR(80)"/> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.0/addDateNewToSalesproject.xml b/.liquibase/Data_alias/basic/2021.0.0/addDateNewToSalesproject.xml new file mode 100644 index 0000000000000000000000000000000000000000..93663b59e73ce1a792cc2adb213d0e3087105d58 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.0/addDateNewToSalesproject.xml @@ -0,0 +1,10 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="37812654-5f30-4256-9704-976567da1dd3"> + <addColumn tableName="SALESPROJECT"> + <column name="DATE_NEW" type="DATETIME" /> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.0/changelog.xml b/.liquibase/Data_alias/basic/2021.0.0/changelog.xml index 0ec02e0b5db5b6b0b60aab7a420a17abffe5f3c2..21d9b6123c339868f578deb1c41f89eb8269b0d3 100644 --- a/.liquibase/Data_alias/basic/2021.0.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.0/changelog.xml @@ -11,4 +11,8 @@ <include relativeToChangelogFile="true" file="MissingIndizes/add_MissingIndizes.xml"/> <include relativeToChangelogFile="true" file="SalesprojectConversion/changelog.xml"/> <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/> + <include relativeToChangelogFile="true" file="Keywords/changelog.xml"/> + <include relativeToChangelogFile="true" file="KeywordMigration/changelog.xml"/> + <include relativeToChangelogFile="true" file="addDateNewToSalesproject.xml"/> + <include relativeToChangelogFile="true" file="EwsContactSync/create_ab_synccontact.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml index b02071fcb7dc81c6fead45952d21c67523b1b96d..501abc4a8119a32b98be9512a91506f1fee1b5d7 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml @@ -12,6 +12,7 @@ <column name="PROJECTTITLE" value="Erstprojekt"/> <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> <column name="STARTDATE" valueDate="2020-05-14T12:00:00"/> + <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/> <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> <insert tableName="salesproject"> @@ -24,6 +25,7 @@ <column name="PROJECTTITLE" value="Skyscraper / Pilotprojekt"/> <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> <column name="STARTDATE" valueDate="2020-05-15T12:00:00"/> + <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/> <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> <insert tableName="salesproject"> @@ -36,6 +38,7 @@ <column name="PROJECTTITLE" value="Kronen Pilotprojekt"/> <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/> <column name="STARTDATE" valueDate="2020-05-13T12:00:00"/> + <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/> <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> <insert tableName="salesproject"> @@ -48,6 +51,7 @@ <column name="PROJECTTITLE" value="Transatlantik Initialprojekt"/> <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> <column name="STARTDATE" valueDate="2020-05-15T12:00:00"/> + <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/> <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> <insert tableName="salesproject"> @@ -59,6 +63,7 @@ <column name="PROJECTTITLE" value="Projekt 123"/> <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/> <column name="STARTDATE" valueDate="2020-11-24T12:00:00"/> + <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/> <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> <insert tableName="salesproject"> @@ -71,6 +76,7 @@ <column name="PROJECTTITLE" value="Buchner Neuprojekt"/> <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/> <column name="STARTDATE" valueDate="2020-02-05T12:00:00"/> + <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/> <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> </changeSet> diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index e49dccc3c73aae94950bf4bf11553c95fe43a3ad..12d0865aebe1c4bc81cb8563000a34e896ec8998 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -23,4 +23,4 @@ <!--enable this only when you definetly want to overwrite the existing data with demo records:--> <!--<include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>--> -</databaseChangeLog> +</databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index eb3430a4a65f0baae48dcf1658a65d5c10cf952b..e7fffbd3b79ae5520b1b56ed1c7870d518399740 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -3786,6 +3786,20 @@ </customStringProperty> </customProperties> </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -6536,7 +6550,7 @@ <columnType v="12" /> <size v="80" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -6648,6 +6662,20 @@ <title>Keyword entry Id</title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_CATEGORY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -6862,6 +6890,19 @@ </customBooleanProperty> </customProperties> </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_CATEGORY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -17262,6 +17303,82 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>AB_KEYWORD_CATEGORY</name> + <dbName></dbName> + <idColumn>AB_KEYWORD_CATEGORYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SORTINGBY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_CATEGORYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTINGDIRECTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="4" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> <entityDb> <name>MST_TEAMLINK</name> <dbName></dbName> diff --git a/aliasDefinition/IndexSearchAlias/IndexSearchAlias.aod b/aliasDefinition/IndexSearch/IndexSearch.aod similarity index 91% rename from aliasDefinition/IndexSearchAlias/IndexSearchAlias.aod rename to aliasDefinition/IndexSearch/IndexSearch.aod index 79981226f95fdf63a642c463bce21dc56fa76f5e..303c40160f5b0ba380375fd002efdb15985aea7c 100644 --- a/aliasDefinition/IndexSearchAlias/IndexSearchAlias.aod +++ b/aliasDefinition/IndexSearch/IndexSearch.aod @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <aliasDefinition xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasDefinition/1.2.0"> - <name>IndexSearchAlias</name> + <name>IndexSearch</name> <majorModelMode>DISTRIBUTED</majorModelMode> <datasourceType v="18" /> </aliasDefinition> diff --git a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod index 6407da1b96ade99cd89fd172be15282552aca01d..e9311949486072f70d0a634a2ee59214ae3373f1 100644 --- a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod +++ b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod @@ -2238,7 +2238,6 @@ <entityDb> <name>ASYS_COLLECTOR_DATA</name> <dbName></dbName> - <idColumn>DATAID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -2256,12 +2255,12 @@ <entityFieldDb> <name>DATAID</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> <columnType v="1" /> <size v="63" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="true" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> @@ -3245,6 +3244,1602 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>ASYS_ICONS</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>BINDATA</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ICON_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_MAILREPOSIT</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>FLAGGED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FOLDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAILUSER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECEIVEDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECIPIENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="2046" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SEEN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENTDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1023" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_MAILREPOSIT_HASH</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MAILHASH</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="31" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAILINFO</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_CALENDARSYNC</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>LASTMODIFIED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MASTERUID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SLAVEUID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SUSER</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_UIDRESOLVER</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ENTRY_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTRY_UID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTRY_USER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_FARM</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLIENTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FARMVERSION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="12" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LICENSE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENCODING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SERVERID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WORKLOAD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_FARM_CLIENT</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CHARACTERISTIC</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLIENTID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SERVERID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USERNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_AUDIT</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ACOLUMNNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ALIAS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATABLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATIMESTAMP</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AUSER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATASETID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1023" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATASETNEWVALUE_BLOB</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATASETNEWVALUE_CLOB</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATASETNEWVALUE_STRING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1023" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOGTIME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOGTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOGWRITERUID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SQLACTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_SYNCSLAVES</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ACTIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEVICEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="40" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTERVALL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LASTSYNC</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SLAVEUID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="12" /> + <size v="127" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_XMPP_OFFLINESTANZA</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ATIMESTAMP</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>JID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STANZA</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_XMPP_HISTORY</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ATIMESTAMP</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHATMARKER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="16" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>JID_FROM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>JID_TO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MSGMARKER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MSGTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="16" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STANZA</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_VERSIONHISTORY</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="0" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPERATION_DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPERATION_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TABLE_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VERSION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_TEST</name> + <dbName></dbName> + <idColumn>ID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TEST_VARCHAR_1</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ASYS_USER</name> + <dbName></dbName> + <idColumn>ID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>XMLDATA</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ICON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 1cdffd7223648bab029e0f8bcb9024abe867b04a..56f31da9f97db53dd72583e0cb8631a0a3527050 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -285,6 +285,10 @@ <name>Attribute</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>KeywordCategory</name> + <kind v="10077" /> + </entityNode> <entityNode> <name>KeywordEntry</name> <kind v="10077" /> @@ -336,6 +340,10 @@ <name>District</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>SalesprojectPhaseDefinition</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> </childNodes> diff --git a/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js b/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js index f6417bb26a778fd4df642ffb42f2f127742c3905..a8965c43523db6c703fca77193786658d31b5098 100644 --- a/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js @@ -34,7 +34,7 @@ function _get360Data(pContactId, pContextList) var filter = vars.get("$sys.filter"); for(var context in pContextList) { - var group = context; + var group = context if(pContextList[context].hasOwnProperty("setGroupBy") && pContextList[context].hasOwnProperty("groupByKeyword")) var groupKeyword = Utils.objectFromMap(new Map(KeywordUtils.getEntryNamesAndIdsByContainer(pContextList[context]["groupByKeyword"]))); diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod index 989e3516e41bd5e72029a4d6078bb40722e17fe7..968e15b45cc01648663f42fda0d233b1dddad81d 100644 --- a/entity/Activity_entity/Activity_entity.aod +++ b/entity/Activity_entity/Activity_entity.aod @@ -655,6 +655,12 @@ </entityParameter> </children> </entityProvider> + <entityField> + <name>infoTable</name> + <title>Description</title> + <contentType>LONG_TEXT</contentType> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/infotable/valueProcess.js</valueProcess> + </entityField> <entityActionGroup> <name>MSTeamsActions</name> <title>MS Teams</title> @@ -696,13 +702,6 @@ <onActionProcess>%aditoprj%/entity/Activity_entity/entityfields/newsupportticket/onActionProcess.js</onActionProcess> <iconId>VAADIN:CHAT</iconId> </entityActionField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/Activity_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityActionGroup> <name>filterActions</name> <children> @@ -724,12 +723,13 @@ </entityActionField> </children> </entityActionGroup> - <entityField> - <name>infoTable</name> - <title>Description</title> - <contentType>LONG_TEXT</contentType> - <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/infotable/valueProcess.js</valueProcess> - </entityField> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/Activity_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/AddressType_entity/recordcontainers/db/conditionProcess.js b/entity/AddressType_entity/recordcontainers/db/conditionProcess.js index 6e937ecf4c22f7a5bb99a4320ddb55e7a32590f0..691754513ccf84a63b97421354597a140f80d079 100644 --- a/entity/AddressType_entity/recordcontainers/db/conditionProcess.js +++ b/entity/AddressType_entity/recordcontainers/db/conditionProcess.js @@ -5,7 +5,7 @@ import("KeywordRegistry_basic"); import("Sql_lib"); import("Keyword_lib"); -var cond = newWhere("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.addressType()); +var cond = newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.addressType())); var usageFilter = vars.get("$param.UsageFilter_param"); @@ -16,6 +16,7 @@ if (usageFilter) cond.and("AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", keywordAttribute.getSqlBuilderSelect().and(["AB_KEYWORD_ATTRIBUTERELATION", keywordAttribute.dbField], "1"), SqlBuilder.IN()) + .and("AB_KEYWORD_ENTRY.ISACTIVE", "1"); } result.string(cond.toString()); \ No newline at end of file diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod index e3d3ce500ad05f8859ed18e27398714824b560c9..f049394bc23fffc92a1a735f41aa9bc86cba9d5f 100644 --- a/entity/AppointmentLink_entity/AppointmentLink_entity.aod +++ b/entity/AppointmentLink_entity/AppointmentLink_entity.aod @@ -90,6 +90,7 @@ </entityConsumer> <entityActionField> <name>opencontext</name> + <iconId>VAADIN:OPEN_BOOK</iconId> </entityActionField> <entityParameter> <name>LinkedObjectId_param</name> diff --git a/entity/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod index e0d575f629117beb7aa01fc1fc1db28db56f87c3..8774cf43e3a78aece8ec5c3e63aedb54c23aa218 100644 --- a/entity/Attribute_entity/Attribute_entity.aod +++ b/entity/Attribute_entity/Attribute_entity.aod @@ -338,6 +338,7 @@ <entityActionField> <name>openDetails</name> <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/opendetails/onActionProcess.js</onActionProcess> + <iconId>VAADIN:GLASSES</iconId> <state>INVISIBLE</state> </entityActionField> <entityActionField> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index e03b5eb5000044f92d8a605fc0086d7656acde5d..3b728ee07f40467fe2f9f1caddd74ca12e531a4f 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -228,34 +228,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>sendMail</name> - <title>Send</title> - <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/onActionProcess.js</onActionProcess> - <iconId>VAADIN:PAPERPLANE</iconId> - <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js</stateProcess> - <tooltipProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/tooltipProcess.js</tooltipProcess> - </entityActionField> - <entityActionField> - <name>testMail</name> - <title>Test email</title> - <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CLIPBOARD_CHECK</iconId> - </entityActionField> - <entityActionField> - <name>downloadTemplate</name> - <title>Download template</title> - <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess> - <iconId>VAADIN:FILE_FONT</iconId> - <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityField> <name>contentPreview</name> <title>Preview</title> @@ -276,12 +248,6 @@ <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/countattachments/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/countattachments/valueProcess.js</valueProcess> </entityField> - <entityActionField> - <name>copyBulkmail</name> - <title>Copy bulkmail</title> - <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js</onActionProcess> - <iconId>VAADIN:COPY</iconId> - </entityActionField> <entityParameter> <name>CopyBulkMailId_param</name> <expose v="true" /> @@ -323,6 +289,40 @@ <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/emleditinfo/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/emleditinfo/valueProcess.js</valueProcess> </entityField> + <entityActionField> + <name>sendMail</name> + <title>Send</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PAPERPLANE</iconId> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js</stateProcess> + <tooltipProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>testMail</name> + <title>Test email</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CLIPBOARD_CHECK</iconId> + </entityActionField> + <entityActionField> + <name>downloadTemplate</name> + <title>Download template</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess> + <iconId>VAADIN:FILE_FONT</iconId> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>copyBulkmail</name> + <title>Copy bulkmail</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:COPY</iconId> + </entityActionField> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index f5c04fb9aa81e250a12f0f2253e8201607d2aa53..8e4f23dc87086a0d65df0b391c3816b4f4641e26 100644 --- a/entity/Campaign_entity/Campaign_entity.aod +++ b/entity/Campaign_entity/Campaign_entity.aod @@ -498,8 +498,8 @@ </children> </entityConsumer> <entityField> - <name>CAMPAIGN_OBEJCTTYPE</name> - <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaign_obejcttype/valueProcess.js</valueProcess> + <name>CAMPAIGN_OBJECTTYPE</name> + <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaign_objecttype/valueProcess.js</valueProcess> </entityField> <entityConsumer> <name>PersonConsumer</name> @@ -687,6 +687,14 @@ <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtensionSet> + <filterExtension> + <name>Favorite_Filter</name> + <title>Favoritegroup</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js</filterValuesProcess> + <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> </recordContainers> diff --git a/entity/Campaign_entity/entityfields/campaign_obejcttype/valueProcess.js b/entity/Campaign_entity/entityfields/campaign_objecttype/valueProcess.js similarity index 100% rename from entity/Campaign_entity/entityfields/campaign_obejcttype/valueProcess.js rename to entity/Campaign_entity/entityfields/campaign_objecttype/valueProcess.js diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8c69112797b6d3dfddda65853554193ffd335918 --- /dev/null +++ b/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("Favorites_lib"); +import("system.result"); +import("Sql_lib"); + +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); + +var objecttype = vars.get("$field.CAMPAIGN_OBJECTTYPE"); +var idcolumn = "CAMPAIGN.CAMPAIGNID"; + +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); \ No newline at end of file diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..419128ca73fe597afc7ca4aeed50b28e610206ec --- /dev/null +++ b/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js @@ -0,0 +1,5 @@ +import("Context_lib"); +import("system.result"); +import("Favorites_lib"); + +result.object(FavoritesUtil.getUserFavoriteGroupsByContext(ContextUtils.getCurrentContextId())); \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..a2e7566be13d80bdeb1b4a29dc61ecfaec1fb4ff --- /dev/null +++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>ChecklistEntryValue_entity</name> + <title>Checklist entries</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:MQL</icon> + <imageProcess>%aditoprj%/entity/ChecklistEntryValue_entity/imageProcess.js</imageProcess> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>CHECKLISTENTRYVALUEID</name> + </entityField> + <entityField> + <name>CHECKLISTENTRY_ID</name> + <title>Checklist entry</title> + <state>READONLY</state> + <displayValueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/checklistentry_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>OBJECT_ROWID</name> + </entityField> + <entityField> + <name>OBJECT_TYPE</name> + <valueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/object_type/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>IS_FULFILLED</name> + <contentType>BOOLEAN</contentType> + </entityField> + <entityField> + <name>USER_EDIT</name> + </entityField> + <entityField> + <name>USER_NEW</name> + </entityField> + <entityField> + <name>DATE_NEW</name> + </entityField> + <entityField> + <name>DATE_EDIT</name> + </entityField> + <entityParameter> + <name>ObjectRowId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ChecklistId_param</name> + <expose v="true" /> + </entityParameter> + <entityProvider> + <name>ChecklistEntryValues</name> + <titlePlural>Checklist entries</titlePlural> + <recordContainer>jdito</recordContainer> + <dependencies> + <entityDependency> + <name>7eae9b1e-cea7-4688-898a-754dba82eac7</name> + <entityName>ChecklistEntry_entity</entityName> + <fieldName>ChecklistEntryValues</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>d4bddebc-b38b-46dc-8bb8-5ffa4fbdf627</name> + <entityName>Salesproject_entity</entityName> + <fieldName>ChecklistEntryValues</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityParameter> + <name>Verifier_param</name> + <valueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>VerifierFnName_param</name> + </entityParameter> + <entityField> + <name>UID</name> + </entityField> + <entityActionGroup> + <name>setChecklistEntryCompleted</name> + <state>AUTO</state> + <stateProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/stateProcess.js</stateProcess> + <children> + <entityActionField> + <name>setCompleted</name> + <title>Set completed</title> + <onActionProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <isSelectionAction v="true" /> + <iconId>NEON:MQL</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityField> + <name>type</name> + <title>Type</title> + <valueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/type/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/type/displayValueProcess.js</displayValueProcess> + </entityField> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <onUpdate>%aditoprj%/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js</onUpdate> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>CHECKLISTENTRY_ID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>CHECKLISTENTRYVALUEID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DATE_EDIT.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DATE_NEW.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>IS_FULFILLED.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>OBJECT_ROWID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>OBJECT_TYPE.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>USER_EDIT.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>USER_NEW.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/ChecklistEntryValue_entity/entityfields/checklistentry_id/displayValueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/checklistentry_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3a0b46b8b1fe9519eeec33585163ca74d1a2ebab --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/checklistentry_id/displayValueProcess.js @@ -0,0 +1,25 @@ +import("system.result"); +import("system.vars"); +import("system.translate"); +import("ChecklistEntryRegistry_basic"); +import("Util_lib"); +import("Sql_lib"); + + +var checklistEntryId = vars.get("$field.CHECKLISTENTRY_ID"); +var verfierFnName = newSelect("TITLE", "Data_alias") + .from("CHECKLISTENTRY") + .where("CHECKLISTENTRY.CHECKLISTENTRYID", checklistEntryId) + .cell(); +var verifierFn = $ChecklistEntryRegistry[verfierFnName]; +var displayValue; + +if (Utils.isFunction(verifierFn)) + displayValue = verifierFn().title; +else{ + displayValue = translate.text(verfierFnName); +} + +result.string(displayValue); + + diff --git a/entity/ChecklistEntryValue_entity/entityfields/object_type/valueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/object_type/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cf41a5d0a18af79415a71643a793880b25ec5ec0 --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/object_type/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + + +result.string(vars.get("$param.ObjectType_param")); \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4684843918c7813b0de9c2057d3b93650301dacf --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.neon"); +import("Sql_lib"); + + +newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID") + .updateFields({"IS_FULFILLED":1}); + +neon.refreshAll(); \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/stateProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9e756de19ae758e0f6d61a377c1f25181a31d598 --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/stateProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); +import("KeywordRegistry_basic"); + + +if (vars.get("$field.type") == $KeywordRegistry.checklistEntryType$auto()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} + +if (vars.get("$field.type") == $KeywordRegistry.checklistEntryType$manual()) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/entityfields/type/displayValueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/type/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..574355fa5aa6c81739dff0c6bc2884eed8ac0829 --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/type/displayValueProcess.js @@ -0,0 +1,7 @@ +import("Keyword_lib"); +import("system.vars"); +import("system.result"); +import("KeywordRegistry_basic"); + + +result.string(KeywordUtils.getViewValue($KeywordRegistry.checklistEntryType(), vars.get("$field.type"))); \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/entityfields/type/valueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/type/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..08c466c3be65f8e64bb5f7d594ce20fca8db8891 --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/type/valueProcess.js @@ -0,0 +1,16 @@ +import("system.result"); +import("system.vars"); +import("Sql_lib"); + + +var checklistEntryId = vars.get("$field.CHECKLISTENTRY_ID"); + +if (checklistEntryId) +{ + var type = newSelect("TYPE") + .from("CHECKLISTENTRY") + .where("CHECKLISTENTRY.CHECKLISTENTRYID", checklistEntryId) + .cell(); + + result.string(type); +} \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bd99ebeed2027694251b6959689c55508a87b6bb --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js @@ -0,0 +1,14 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); +import("ChecklistEntryRegistry_basic"); + + +var fnName = vars.get("$param.VerifierFnName_param"); +var objectRowId = vars.get("$param.ObjectRowId_param"); +var isFulfilledFn = $ChecklistEntryRegistry[fnName]; + +if (Utils.isFunction(isFulfilledFn)) + result.string(isFulfilledFn().verifierFn(objectRowId)); + + diff --git a/entity/ChecklistEntryValue_entity/imageProcess.js b/entity/ChecklistEntryValue_entity/imageProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..de02e652cc1d7938b9675e6e39e10f2e0b1d04c3 --- /dev/null +++ b/entity/ChecklistEntryValue_entity/imageProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.result"); + + +var image; +var isFulfilled = vars.get("$field.IS_FULFILLED"); + +if (isFulfilled == 1) +{ + image = "NEON:MQL"; +} + +result.string(image); \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4727ac92281bcd2d31273ffa81fe95efe7a12786 --- /dev/null +++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,95 @@ +import("system.result"); +import("system.vars"); +import("system.util"); +import("system.db"); +import("KeywordRegistry_basic"); +import("Util_lib"); +import("Sql_lib"); + + +var newUid; +var isExistent; +var checklistEntryIds = []; +var preparedStatements = []; +var checklistEntryValues = []; +var manualChecklistEntries = []; +var manualChecklistEntryValues = []; +var cols = ["CHECKLISTENTRYVALUEID", "CHECKLISTENTRY_ID", "OBJECT_ROWID", "OBJECT_TYPE", + "IS_FULFILLED", "USER_NEW", "USER_EDIT", "DATE_NEW", "DATE_EDIT"]; + +var checklistId = vars.get("$param.ChecklistId_param"); +var objectRowId = vars.get("$param.ObjectRowId_param"); +//var objectType = vars.get("$param.ObjectType_param"); - necessary? +var checklistEntries = []; +if (checklistId) +{ + checklistEntries = newSelect("CHECKLISTENTRYID, CHECKLIST_ID, TITLE, TYPE, USER_NEW, USER_EDIT, DATE_NEW, DATE_EDIT") + .from("CHECKLISTENTRY") + .where("CHECKLISTENTRY.CHECKLIST_ID", checklistId) + .table(); + + checklistEntries.forEach(function(pRow){ + if (pRow[0]) + { + checklistEntryIds.push(pRow[0]); + } + }); +} + +for (i = 0; i < checklistEntries.length; i++) +{ + for (j = 0; j < checklistEntries[i].length; j++) + { + checklistEntryValues[i] = new Array(10); + + if (checklistEntries[i][3] == $KeywordRegistry.checklistEntryType$auto()) + { + newUid = util.getNewUUID(); + vars.set("$param.VerifierFnName_param", checklistEntries[i][2]); + checklistEntryValues[i] = [newUid, checklistEntries[i][0], newUid, "", vars.get("$sys.date"), + Utils.toBoolean(vars.get("$param.Verifier_param")) ? 1 : 0, objectRowId, + "", "null", vars.get("$sys.user")]; + } + else + { + isExistent = newSelect("CHECKLISTENTRYVALUEID, CHECKLISTENTRY_ID, CHECKLISTENTRYVALUEID,\n\ + DATE_EDIT, DATE_NEW, IS_FULFILLED, OBJECT_ROWID, OBJECT_TYPE, USER_EDIT, USER_NEW") + .from("CHECKLISTENTRYVALUE") + .where("CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID", checklistEntries[i][0]) + .and("CHECKLISTENTRYVALUE.OBJECT_ROWID", objectRowId) + .arrayRow(); + if (isExistent.length > 0) + { + checklistEntryValues[i] = isExistent; + } + else + { + newUid = util.getNewUUID(); + checklistEntryValues[i] = [newUid, checklistEntries[i][0], newUid, "", vars.get("$sys.date"), "0", objectRowId, "", + "null", vars.get("$sys.user")]; + isExistent = preparedStatements.some(function(pPreparedStatement){ + return pPreparedStatement[3].includes(checklistEntries[i][0]) && pPreparedStatement[3].includes(objectRowId); + }); + + if (!isExistent) + { + preparedStatements.push(["CHECKLISTENTRYVALUE", + cols, + db.getColumnTypes("CHECKLISTENTRYVALUE", cols), + [checklistEntryValues[i][0], + checklistEntryValues[i][1], + checklistEntryValues[i][6], + checklistEntryValues[i][7], + checklistEntryValues[i][5].toString(), + checklistEntryValues[i][9], + checklistEntryValues[i][8], + checklistEntryValues[i][4], + checklistEntryValues[i][3]]]); + } + } + } + } +} + +db.inserts(preparedStatements, "Data_alias"); +result.object(checklistEntryValues); \ No newline at end of file diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js new file mode 100644 index 0000000000000000000000000000000000000000..666ee575b4538a2df8721203cf2feaea2a61158e --- /dev/null +++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js @@ -0,0 +1,10 @@ +import("Sql_lib"); +import("system.vars"); + +var changed = vars.get("$local.changed"); + +if(changed) +{ + newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID") + .updateFields({"IS_FULFILLED" : vars.get("$field.IS_FULFILLED")}); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..200dfd83079a685ddc6cc91e1f5cae555ce0333c --- /dev/null +++ b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>ChecklistEntry_entity</name> + <title>Checklist entries</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:MQL</icon> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>CHECKLISTENTRYID</name> + </entityField> + <entityField> + <name>TITLE</name> + <title>Title</title> + <dropDownProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/title/dropDownProcess.js</dropDownProcess> + <displayValueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>TYPE</name> + <title>Type</title> + <dropDownProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/type/dropDownProcess.js</dropDownProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>ChecklistEntries</name> + <dependencies> + <entityDependency> + <name>84d5df6b-1aff-4ab2-88a5-fd3b591916ce</name> + <entityName>Checklist_entity</entityName> + <fieldName>ChecklistEntries</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>9134e842-dac3-4f09-9e03-f71827b15fcf</name> + <entityName>SalesprojectPhaseDefinition_entity</entityName> + <fieldName>ChecklistEntries</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityField> + <name>CHECKLIST_ID</name> + <valueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/checklist_id/valueProcess.js</valueProcess> + </entityField> + <entityParameter> + <name>ChecklistUid_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>ChecklistEntryValues</name> + <dependency> + <name>dependency</name> + <entityName>ChecklistEntryValue_entity</entityName> + <fieldName>ChecklistEntryValues</fieldName> + </dependency> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CHECKLISTENTRYID.value</name> + <recordfield>CHECKLISTENTRY.CHECKLISTENTRYID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>CHECKLISTENTRY.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>CHECKLISTENTRY.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TITLE.value</name> + <recordfield>CHECKLISTENTRY.TITLE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TYPE.value</name> + <recordfield>CHECKLISTENTRY.TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>CHECKLISTENTRY.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>CHECKLISTENTRY.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CHECKLIST_ID.value</name> + <recordfield>CHECKLISTENTRY.CHECKLIST_ID</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>65224b99-e70c-49fb-955e-ee5bca837d6c</name> + <tableName>CHECKLISTENTRY</tableName> + <primaryKey>CHECKLISTENTRYID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/ChecklistEntry_entity/entityfields/checklist_id/valueProcess.js b/entity/ChecklistEntry_entity/entityfields/checklist_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..31aabdc692618a256df1bd91be2ae64c0cad7d99 --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/checklist_id/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + + +result.string(vars.get("$param.ChecklistUid_param")); \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/date_edit/valueProcess.js b/entity/ChecklistEntry_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b1325e54818a2ef8aef43c452e840cf0e00a340b --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/date_new/valueProcess.js b/entity/ChecklistEntry_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..557358ecb61b3de637a1a916a37929ca88fc9563 --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b9d9117ecefc66d14394164cab6b1ca390a67c50 --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); +import("system.translate"); +import("KeywordRegistry_basic"); + +var title = vars.get("$field.TITLE"); + +if (vars.get("$field.TYPE") == $KeywordRegistry.checklistEntryType$manual()) +{ + result.string(translate.text(title)); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/title/dropDownProcess.js b/entity/ChecklistEntry_entity/entityfields/title/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3a7f1a267bc366a0da3a7c3a5a68cc21f418479a --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/title/dropDownProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("ChecklistEntryRegistry_basic"); + + +if (vars.get("$field.TYPE") == $KeywordRegistry.checklistEntryType$auto()) +{ + result.object($ChecklistEntryRegistry.getEntryList()); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/type/dropDownProcess.js b/entity/ChecklistEntry_entity/entityfields/type/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f3b2df2523349e9e5fe6e9ac8d8b8f712aed3bec --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/type/dropDownProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); +import("system.translate"); + +result.object({"MANUAL":translate.text("Manually"), "AUTO":translate.text("Automatically")}); \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/user_edit/valueProcess.js b/entity/ChecklistEntry_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..de5a4ba34e5e6a1abd7ba5be9d69d59f7f05330f --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/entityfields/user_new/valueProcess.js b/entity/ChecklistEntry_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c2c237153fee057be773b3a43d34c443734039e5 --- /dev/null +++ b/entity/ChecklistEntry_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js b/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6c25101de02357ff096464daebd0cb512ce138c8 --- /dev/null +++ b/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,18 @@ +import("system.result"); +import("system.vars"); +import("Sql_lib"); + + +var checklistId = vars.get("$param.ChecklistUid_param"); +var cond = newWhere(); + +if (checklistId) +{ + cond.and("CHECKLISTENTRY.CHECKLIST_ID", checklistId); +} +else +{ + cond.and("1 = 2"); +} + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Checklist_entity/Checklist_entity.aod b/entity/Checklist_entity/Checklist_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..5addd3e3f03439f55e3a892ba55ca4c86552b2d3 --- /dev/null +++ b/entity/Checklist_entity/Checklist_entity.aod @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>Checklist_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:MQC</icon> + <siblings /> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>CHECKLISTID</name> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/Checklist_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/Checklist_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/Checklist_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/Checklist_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>Checklists</name> + </entityProvider> + <entityConsumer> + <name>ChecklistEntries</name> + <dependency> + <name>dependency</name> + <entityName>ChecklistEntry_entity</entityName> + <fieldName>ChecklistEntries</fieldName> + </dependency> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CHECKLISTID.value</name> + <recordfield>CHECKLIST.CHECKLISTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>CHECKLIST.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>CHECKLIST.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>CHECKLIST.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>CHECKLIST.USER_NEW</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>6151d9b7-6253-459b-953d-027710b120d7</name> + <tableName>CHECKLIST</tableName> + <primaryKey>CHECKLISTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/Checklist_entity/entityfields/date_edit/valueProcess.js b/entity/Checklist_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b1325e54818a2ef8aef43c452e840cf0e00a340b --- /dev/null +++ b/entity/Checklist_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/Checklist_entity/entityfields/date_new/valueProcess.js b/entity/Checklist_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..557358ecb61b3de637a1a916a37929ca88fc9563 --- /dev/null +++ b/entity/Checklist_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/Checklist_entity/entityfields/user_edit/valueProcess.js b/entity/Checklist_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..de5a4ba34e5e6a1abd7ba5be9d69d59f7f05330f --- /dev/null +++ b/entity/Checklist_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/Checklist_entity/entityfields/user_new/valueProcess.js b/entity/Checklist_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c2c237153fee057be773b3a43d34c443734039e5 --- /dev/null +++ b/entity/Checklist_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod index 50832393a42e0ccb91f71e3946cb435fd76c68fc..a2ecf6d0ca95c3fa6adb10903a636bc8a28eab8e 100644 --- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod +++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod @@ -92,9 +92,17 @@ <children> <entityActionField> <name>UpdateClassification</name> - <title>Recalculate all Classifications</title> + <title>Recalculate Classifications</title> <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js</onActionProcess> <iconId>VAADIN:AUTOMATION</iconId> + <tooltip>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</tooltip> + </entityActionField> + <entityActionField> + <name>UpdateAllClassifications</name> + <title>Recalculate all Classifications</title> + <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js</onActionProcess> + <iconId>VAADIN:AUTOMATION</iconId> + <tooltip>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</tooltip> </entityActionField> </children> </entityActionGroup> diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a8ccdd28ccba6f9fe16b69d57538c16dc9898ba3 --- /dev/null +++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js @@ -0,0 +1,24 @@ +import("system.process"); +import("system.question"); +import("system.text"); +import("system.translate"); +import("system.util"); +import("system.vars"); + +var execute = question.askYesNo(translate.text("Start Serveprocess"), translate.text("Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed."), false); +if(execute) +{ + + + var processConfig = process.createStartAsyncConfig() + .setName("updateClassifications_serverProcess") + .setUser( vars.get("$sys.user")) + .setThreadPriority(process.THREADPRIORITY_LOW) + .setTimerType(process.TIMERTYPE_SERVER) + .setLocalVariables({"recalculateAll_param" : true}); + + + process.startAsync(processConfig); + + question.showMessage(translate.text("Serverprocess has been started"), question.INFORMATION, translate.text("Classification")); +} diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod index ce16a9a80461f72c42b1c4447f9be2aee94ca93a..0934836f181842f38e69f2df623a6991680f64c1 100644 --- a/entity/Classification_entity/Classification_entity.aod +++ b/entity/Classification_entity/Classification_entity.aod @@ -155,6 +155,19 @@ <entityField> <name>DISPLAYVALUE</name> </entityField> + <entityActionGroup> + <name>fitlerviewActionGroup</name> + <title>Action</title> + <children> + <entityActionField> + <name>refreshClassificationsOfThisDataset</name> + <title>refresh classifications</title> + <onActionProcess>%aditoprj%/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:REFRESH</iconId> + </entityActionField> + </children> + </entityActionGroup> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js b/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..10cfa6bda238dca910902b0b1a731d2e483336eb --- /dev/null +++ b/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js @@ -0,0 +1,18 @@ +import("system.process"); +import("system.util"); +import("system.vars"); + +var params = { + "refreshSingleRecord_param" : true, + "ObjectRowid_param" : vars.get("$param.ObjectRowid_param"), + "ObjectType_param" : vars.get("$param.ObjectType_param")} + +var processConfig = process.createStartAsyncConfig() + .setName("updateClassifications_serverProcess") + .setUser( vars.get("$sys.user")) + .setThreadPriority(process.THREADPRIORITY_LOW) + .setTimerType(process.TIMERTYPE_SERVER) + .setLocalVariables(params); + + +process.startAsync(processConfig); \ No newline at end of file diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod index 43f2aa4006b14f64523fb250c19611043d93efb3..31f48ebaa3a51281176d95c6a40ea1c27f54c59d 100644 --- a/entity/Communication_entity/Communication_entity.aod +++ b/entity/Communication_entity/Communication_entity.aod @@ -6,6 +6,7 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Communication_entity/documentation.adoc</documentation> <contentTitleProcess>%aditoprj%/entity/Communication_entity/contentTitleProcess.js</contentTitleProcess> + <afterOperatingState>%aditoprj%/entity/Communication_entity/afterOperatingState.js</afterOperatingState> <recordContainer>db</recordContainer> <entityFields> <entityField> diff --git a/entity/Communication_entity/afterOperatingState.js b/entity/Communication_entity/afterOperatingState.js new file mode 100644 index 0000000000000000000000000000000000000000..7085e9f853c10e7ebaadcd76f44b8786c5d621ed --- /dev/null +++ b/entity/Communication_entity/afterOperatingState.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.neon"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) + vars.set("$context.PushDataPrivacyNotification", "false"); \ No newline at end of file diff --git a/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js b/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js index bafe6c4d6176c505dd8e202d89ae7544d0bd4bb9..fc5d866e8a6eaa30ab0ed76e2105c1091a699b95 100644 --- a/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js +++ b/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js @@ -1,3 +1,4 @@ +import("Keyword_lib"); import("Sql_lib"); import("system.result"); import("KeywordRegistry_basic"); @@ -5,6 +6,6 @@ import("KeywordRegistry_basic"); result.string(new SqlBuilder() .from("COMMUNICATION") .leftJoin("AB_KEYWORD_ENTRY", newWhere("COMMUNICATION.MEDIUM_ID = AB_KEYWORD_ENTRY.KEYID") - .and("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.communicationMedium())) + .and("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.communicationMedium()))) .toString() ); \ No newline at end of file diff --git a/entity/Communication_entity/recordcontainers/db/onDBInsert.js b/entity/Communication_entity/recordcontainers/db/onDBInsert.js index 5497aac10e4c84e9d6f63bdd28012b0bfe75cc06..7d836ae39e0b9d809ba388111d4ab1ab4302a6f9 100644 --- a/entity/Communication_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Communication_entity/recordcontainers/db/onDBInsert.js @@ -11,7 +11,11 @@ var rowdata = vars.get("$local.rowdata"); var standard = new StandardObject("Communication", vars.get("$local.uid"), "Person", rowdata["COMMUNICATION.CONTACT_ID"]) standard.onCommunicationInsert(rowdata["COMMUNICATION.MEDIUM_ID"]); -DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient")) +{ + DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); + vars.set("$context.PushDataPrivacyNotification", "true"); +} if (vars.exists("$param.AdditionalContactIds_param") && vars.get("$param.AdditionalContactIds_param")) { diff --git a/entity/Communication_entity/recordcontainers/db/onDBUpdate.js b/entity/Communication_entity/recordcontainers/db/onDBUpdate.js index da680f82c23c27da4f2cfb65488df9b1426b77bc..ebf288114b69f9c461bebc6ca31b2c39ada5b513 100644 --- a/entity/Communication_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Communication_entity/recordcontainers/db/onDBUpdate.js @@ -10,7 +10,11 @@ if (rowdata["COMMUNICATION.CONTACT_ID"] != null) var standard = new StandardObject("Communication", vars.get("$local.uid"), "Person", rowdata["COMMUNICATION.CONTACT_ID"]) standard.onCommunicationUpdate(rowdata["COMMUNICATION.MEDIUM_ID"]); } - -DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); + +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient")) +{ + DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); + vars.set("$context.PushDataPrivacyNotification", "true"); +} WorkflowSignalSender.updated(); \ No newline at end of file diff --git a/entity/Contact_entity/Contact_entity.aod b/entity/Contact_entity/Contact_entity.aod index 08a76c0db8ced7f5d5731edf0f5437bf788451e6..76d2877c06a3cab9ccd4c6805e41709ab6115b5f 100644 --- a/entity/Contact_entity/Contact_entity.aod +++ b/entity/Contact_entity/Contact_entity.aod @@ -8,6 +8,7 @@ <grantUpdateProcess>%aditoprj%/entity/Contact_entity/grantUpdateProcess.js</grantUpdateProcess> <grantDeleteProcess>%aditoprj%/entity/Contact_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/Contact_entity/contentTitleProcess.js</contentTitleProcess> + <afterUiInit>%aditoprj%/entity/Contact_entity/afterUiInit.js</afterUiInit> <onValidation>%aditoprj%/entity/Contact_entity/onValidation.js</onValidation> <initFilterProcess>%aditoprj%/entity/Contact_entity/initFilterProcess.js</initFilterProcess> <iconId>VAADIN:USERS</iconId> @@ -258,6 +259,11 @@ <entityConsumer> <name>Attributes</name> <onValidation>%aditoprj%/entity/Contact_entity/entityfields/attributes/onValidation.js</onValidation> + <dependency> + <name>dependency</name> + <entityName>AttributeRelation_entity</entityName> + <fieldName>AttributeRelations</fieldName> + </dependency> <children> <entityParameter> <name>ShowDsgvoMessage_param</name> @@ -273,11 +279,6 @@ <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>AttributeRelation_entity</entityName> - <fieldName>AttributeRelations</fieldName> - </dependency> </entityConsumer> </entityFields> <recordContainers> diff --git a/entity/Contact_entity/afterUiInit.js b/entity/Contact_entity/afterUiInit.js new file mode 100644 index 0000000000000000000000000000000000000000..e4d2f842cd167aab5eb6e0188466acd7aae5bdcc --- /dev/null +++ b/entity/Contact_entity/afterUiInit.js @@ -0,0 +1,30 @@ +import("Sql_lib"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + var personId = vars.get("$param.PersonId_param"); + var contactId = vars.get("$param.OwnContactId_param"); + if(personId && contactId) + { + var attributes = newSelect("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID, " + SqlBuilder.caseStatement() + .when(newWhere("AB_ATTRIBUTERELATION.ID_VALUE is null").and("AB_ATTRIBUTERELATION.CHAR_VALUE is null")) + .then("cast(NUMBER_VALUE as CHAR)") + .when(newWhere("AB_ATTRIBUTERELATION.NUMBER_VALUE is null").and("AB_ATTRIBUTERELATION.CHAR_VALUE is null")) + .then("ID_VALUE") + .when(newWhere("AB_ATTRIBUTERELATION.NUMBER_VALUE is null").and("AB_ATTRIBUTERELATION.ID_VALUE is null")) + .then("CHAR_VALUE") + .toString()) + .from("AB_ATTRIBUTERELATION") + .where("AB_ATTRIBUTERELATION.OBJECT_ROWID", contactId) + .table(); + + for (let i = 0; i < attributes.length; i++) { + neon.addRecord("Attributes", { + "AB_ATTRIBUTE_ID" : attributes[i][0], + "VALUE" : attributes[i][1] + }); + } + } +} \ No newline at end of file diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index 3e3262421190782abc4d26f6b958f51acb4dc26b..49afa5872c3c02495fe5846da0a83f2234d4fa72 100644 --- a/entity/Contract_entity/Contract_entity.aod +++ b/entity/Contract_entity/Contract_entity.aod @@ -596,6 +596,7 @@ <contentType>TEXT</contentType> <filterValuesProcess>%aditoprj%/entity/Contract_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js</filterValuesProcess> <filterConditionProcess>%aditoprj%/entity/Contract_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js</filterConditionProcess> + <groupedRecordField></groupedRecordField> <filtertype>BASIC</filtertype> </filterExtension> </filterExtensions> diff --git a/entity/Contract_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Contract_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index 6b54c170684381c41d00387e9f2371c7d327d05a..8f9bf3561bdd112fd994940777b7e761b607f768 100644 --- a/entity/Contract_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/Contract_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("CONTRACT.CONTRACTID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.CONTRACT_OBJECTTYPE"); +var idcolumn = "CONTRACT.CONTRACTID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); \ No newline at end of file diff --git a/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js b/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js index 15b73f9705dc456af35c5d5e144cf88c436a79eb..a79aeb2fc8911e2643259d18c3b7415c01669c2a 100644 --- a/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js +++ b/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js @@ -1,10 +1,11 @@ +import("Keyword_lib"); import("system.result"); import("KeywordRegistry_basic"); import("Sql_lib"); var cond = newSelect("AB_KEYWORD_ENTRY.KEYID") .from("AB_KEYWORD_ENTRY") -.where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.contactStatus()) +.where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.contactStatus())) .and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.contactStatus$inReview(), SqlBuilder.LIKE()); result.string(cond.toString()); \ No newline at end of file diff --git a/entity/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod index 1fc76de0e260fd4d440dfc27264dc1502d2fca59..1501adb177652439951bcd1501084f8e55729aa4 100644 --- a/entity/District_entity/District_entity.aod +++ b/entity/District_entity/District_entity.aod @@ -270,6 +270,7 @@ <name>assignDistrict</name> <title>Assign district</title> <onActionProcess>%aditoprj%/entity/District_entity/entityfields/assigndistrict/onActionProcess.js</onActionProcess> + <iconId>VAADIN:LOCATION_ARROW_CIRCLE</iconId> </entityActionField> <entityActionGroup> <name>ActionGroup</name> diff --git a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js index 0cec405b433c9f43d6e536f471fb001b9da9ac43..df6501d2c3622d1f5a3cbc9c15c7ae99926347f6 100644 --- a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js +++ b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js @@ -5,7 +5,7 @@ import("KeywordRegistry_basic"); import("Sql_lib"); import("Keyword_lib"); -var cond = newWhere("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.documentTemplateTypeCategory()); +var cond = newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.documentTemplateTypeCategory())); var usageFilter = vars.get("$param.usageFilter_param"); if (usageFilter) diff --git a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js index e32403dc6e2df5902c3faeaf8f155a3b41a0f405..3685b526a66a8990d8b94682e3e39617ebfe5a66 100644 --- a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js +++ b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js @@ -2,7 +2,6 @@ import("system.db"); import("system.result"); result.object({ - "AB_KEYWORD_ENTRY.CONTAINER": db.ASCENDING - ,"AB_KEYWORD_ENTRY.SORTING": db.ASCENDING + "AB_KEYWORD_ENTRY.SORTING": db.ASCENDING ,"AB_KEYWORD_ENTRY.TITLE": db.ASCENDING }); \ No newline at end of file diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/DocumentTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index c3deb28e584154a76101902faaebb110e2c5d7d8..73410be03fab8d10e3ee99009855a5dcd5b4df12 100644 --- a/entity/DocumentTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/DocumentTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.DOCUMENTTEMPLATE_OBJECTTYPE"); +var idcolumn = "DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod b/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..332169d840fba95e4b9a7507ede82835e4fda87e --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>EwsSyncAddContacts_entity</name> + <title>add contact to ewssync</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <titlePlural></titlePlural> + <recordContainer>datalessConfig</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>contactIds</name> + <state>EDITABLE</state> + <valueProcess>%aditoprj%/entity/EwsSyncAddContacts_entity/entityfields/contactids/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>countForSync</name> + <title>count</title> + <state>EDITABLE</state> + <valueProcess>%aditoprj%/entity/EwsSyncAddContacts_entity/entityfields/countforsync/valueProcess.js</valueProcess> + </entityField> + <entityParameter> + <name>ContactFilter_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ContactIds_param</name> + <expose v="true" /> + </entityParameter> + <entityActionField> + <name>syncContacts</name> + <title>add to sync</title> + <onActionProcess>%aditoprj%/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/onActionProcess.js</onActionProcess> + <iconId>VAADIN:REFRESH</iconId> + <stateProcess>%aditoprj%/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/stateProcess.js</stateProcess> + <tooltip></tooltip> + </entityActionField> + <entityParameter> + <name>Mode_param</name> + <expose v="true" /> + </entityParameter> + <entityActionField> + <name>removeSyncContacts</name> + <title>remove from sync</title> + <onActionProcess>%aditoprj%/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/onActionProcess.js</onActionProcess> + <isObjectAction v="true" /> + <iconId>NEON:RECURRING_APPOINTMENT_MOVED</iconId> + <stateProcess>%aditoprj%/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/stateProcess.js</stateProcess> + </entityActionField> + </entityFields> + <recordContainers> + <datalessRecordContainer> + <name>datalessConfig</name> + <alias>Data_alias</alias> + </datalessRecordContainer> + </recordContainers> +</entity> diff --git a/entity/EwsSyncAddContacts_entity/entityfields/contactids/valueProcess.js b/entity/EwsSyncAddContacts_entity/entityfields/contactids/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..373f61e18faccaead7724225f920d46437148b77 --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/entityfields/contactids/valueProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("FilterViewAction_lib"); + +var contactIds = JSON.parse(vars.get("$param.ContactIds_param")); +var contactFilter = vars.get("$param.ContactFilter_param"); + +contactIds = FilterViewActionUtils.getUidsBySelectionOrFilter("Person", contactIds, contactFilter); + +result.string(JSON.stringify(contactIds)); \ No newline at end of file diff --git a/entity/EwsSyncAddContacts_entity/entityfields/countforsync/valueProcess.js b/entity/EwsSyncAddContacts_entity/entityfields/countforsync/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4d01818ca409c8b5746f74b408c7b4456931abe8 --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/entityfields/countforsync/valueProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("system.result"); + +var res = ""; +if (vars.get("$field.contactIds")) +{ + res = JSON.parse(vars.getString("$field.contactIds")).length; +} + +result.string(res); diff --git a/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/onActionProcess.js b/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b0a2ce611876352836e323dcd13a38cc97f0a718 --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/onActionProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.tools"); +import("EwsClientSync_lib"); +import("system.vars"); + +var contactIds = JSON.parse(vars.get("$field.contactIds")); +EwsClientSyncUtils.removeFromFavorite(contactIds, tools.getCurrentUser()[tools.NAME]); +neon.closeImage(vars.get("$sys.currentimage"), true); \ No newline at end of file diff --git a/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/stateProcess.js b/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7ae3eef9a8407cd8e4edaee71f77b14a6c233d03 --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/entityfields/removesynccontacts/stateProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +var mode = vars.get("$param.Mode_param"); +var ret = neon.COMPONENTSTATE_INVISIBLE; + +if(mode == "REMOVE") + ret = neon.COMPONENTSTATE_EDITABLE; + +result.string(ret); diff --git a/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/onActionProcess.js b/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..34578d4b676914a1e2aa7b8ec83e9277bd82aea1 --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/onActionProcess.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("EwsClientSync_lib"); +import("system.vars"); + +var toSncContacts = JSON.parse(vars.get("$field.contactIds")); + +//the handling of already Contacts in the Exchange is handeled by the function itself +EwsClientSyncUtils.addToEwsFavorite(toSncContacts); +neon.closeImage(vars.get("$sys.currentimage"), true); \ No newline at end of file diff --git a/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/stateProcess.js b/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c10e581fee4f5e13e064bbbb4a8faa11c9470aa3 --- /dev/null +++ b/entity/EwsSyncAddContacts_entity/entityfields/synccontacts/stateProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +var mode = vars.get("$param.Mode_param"); +var ret = neon.COMPONENTSTATE_INVISIBLE; + +if(mode == "ADD") + ret = neon.COMPONENTSTATE_EDITABLE; + +result.string(ret); diff --git a/entity/ExportTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/ExportTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index 27c569099821e96f51c9ab7e3e5c7a6db87d6e09..57784ebda7e75d58197542d071b5afb2a61cc74e 100644 --- a/entity/ExportTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/ExportTemplate_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("EXPORTTEMPLATE.EXPORTTEMPLATEID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.EXPORTTEMPLATE_OBJECTTYPE"); +var idcolumn = "EXPORTTEMPLATE.EXPORTTEMPLATEID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); \ No newline at end of file diff --git a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js index 1c6923b2958dfd7578394cc3a7bd2a7374d19846..b352d8c4163bbba3d533aa5d431fafa1b7393106 100644 --- a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js +++ b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js @@ -72,14 +72,17 @@ else function isFiltered(filters, logicalConnectionOperator, fav) { - if(filters == null || filters.length == 0) - return true; - var favoObjectType = fav[3]; var favoGroupName = fav[1]; var favoRowId = fav[5]; var favoTitle = fav[6]; + if(favoGroupName.equals("ewssync")) + return false; + + if(filters == null || filters.length == 0) + return true; + var allFilterFulfilled = true; var oneFilterFulfilled = false; diff --git a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/filterextensions/groupgroupnameextension/filterValuesProcess.js b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/filterextensions/groupgroupnameextension/filterValuesProcess.js index f8a6e1919db15f11b8913cd741da51ba6a20c580..6f1d13dcff60b1ece1854c154836485c3ed906a1 100644 --- a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/filterextensions/groupgroupnameextension/filterValuesProcess.js +++ b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/filterextensions/groupgroupnameextension/filterValuesProcess.js @@ -12,10 +12,13 @@ var groupNames = (new SqlBuilder()).selectDistinct("ASYS_RECORDGROUP.TITLE") .arrayColumn(); groupNames.forEach(element => { - if(element.equals("Default")) - allTypes.push([element, translate.text(element)]); - else - allTypes.push([element, element]); + if(!element.equals("ewssync")) + { + if(element.equals("Default")) + allTypes.push([element, translate.text(element)]); + else + allTypes.push([element, element]); + } }); result.object(Array.from(allTypes)); diff --git a/entity/KeywordAttributeRelation_entity/entityfields/containername_param/valueProcess.js b/entity/KeywordAttributeRelation_entity/entityfields/containername_param/valueProcess.js index 77a772ba0e557111e7457572056a741675682979..42e2a5a45c5eb4c5e8ddaaa54013e3ae86c21281 100644 --- a/entity/KeywordAttributeRelation_entity/entityfields/containername_param/valueProcess.js +++ b/entity/KeywordAttributeRelation_entity/entityfields/containername_param/valueProcess.js @@ -4,8 +4,9 @@ import("system.vars"); import("Sql_lib"); var entryId = vars.get("$param.KeywordEntryId_param"); -var containerName = newSelect("AB_KEYWORD_ENTRY.CONTAINER") +var containerName = newSelect("AB_KEYWORD_CATEGORY.NAME") .from("AB_KEYWORD_ENTRY") + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID = AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID") .where("AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", entryId) .cell(); diff --git a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod index 0f89a75d32ff06d51dad304868d18f9dfc56ac49..f323e21738e421a8a016ff2f8baccc78f185722e 100644 --- a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod +++ b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod @@ -18,12 +18,6 @@ <name>AB_KEYWORD_ATTRIBUTEID</name> <valueProcess>%aditoprj%/entity/KeywordAttribute_entity/entityfields/ab_keyword_attributeid/valueProcess.js</valueProcess> </entityField> - <entityField> - <name>CONTAINER</name> - <title>Container</title> - <mandatory v="true" /> - <dropDownProcess>%aditoprj%/entity/KeywordAttribute_entity/entityfields/container/dropDownProcess.js</dropDownProcess> - </entityField> <entityField> <name>NAME</name> <title>Name</title> @@ -86,11 +80,27 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>AB_KEYWORD_CATEGORY_ID</name> + <title>Keyword Category</title> + <consumer>KeywordCategoryConsumer</consumer> + <mandatory v="true" /> + <displayValueProcess>%aditoprj%/entity/KeywordAttribute_entity/entityfields/ab_keyword_category_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>KeywordCategoryConsumer</name> + <dependency> + <name>dependency</name> + <entityName>KeywordCategory_entity</entityName> + <fieldName>AllKeywordCategoryProvider</fieldName> + </dependency> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> <name>db</name> <isPageable v="false" /> + <fromClauseProcess>%aditoprj%/entity/KeywordAttribute_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> <conditionProcess>%aditoprj%/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <onDBDelete>%aditoprj%/entity/KeywordAttribute_entity/recordcontainers/db/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> @@ -99,12 +109,6 @@ <name>AB_KEYWORD_ATTRIBUTEID.value</name> <recordfield>AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID</recordfield> </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>CONTAINER.value</name> - <recordfield>AB_KEYWORD_ATTRIBUTE.CONTAINER</recordfield> - <isFilterable v="true" /> - <isLookupFilter v="true" /> - </dbRecordFieldMapping> <dbRecordFieldMapping> <name>NAME.value</name> <recordfield>AB_KEYWORD_ATTRIBUTE.NAME</recordfield> @@ -121,15 +125,33 @@ <name>TYPE.displayValue</name> <expression>%aditoprj%/entity/KeywordAttribute_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js</expression> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>AB_KEYWORD_CATEGORY_ID.value</name> + <recordfield>AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="false" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>AB_KEYWORD_CATEGORY_ID.displayValue</name> + <recordfield>AB_KEYWORD_CATEGORY.NAME</recordfield> + <columnAlias></columnAlias> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>bd113d67-34ab-4708-b0e5-60a44332e6b8</name> + <name>a59612f2-255c-43df-9046-16f2abbba31d</name> <tableName>AB_KEYWORD_ATTRIBUTE</tableName> <primaryKey>AB_KEYWORD_ATTRIBUTEID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> + <linkInformation> + <name>cd0b7116-15a8-45ec-8455-61fd577f7ee8</name> + <tableName>AB_KEYWORD_CATEGORY</tableName> + <primaryKey>AB_KEYWORD_CATEGORYID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> </linkInformation> </dbRecordContainer> </recordContainers> diff --git a/entity/KeywordAttribute_entity/entityfields/ab_keyword_category_id/displayValueProcess.js b/entity/KeywordAttribute_entity/entityfields/ab_keyword_category_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..89b5e069dfebf45a710ac11a070f173c70d02bc2 --- /dev/null +++ b/entity/KeywordAttribute_entity/entityfields/ab_keyword_category_id/displayValueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); + + +var containerName = KeywordUtils.getCategoryNameById(vars.get("$field.AB_KEYWORD_CATEGORY_ID")); + +result.string(containerName); diff --git a/entity/KeywordAttribute_entity/entityfields/container/dropDownProcess.js b/entity/KeywordAttribute_entity/entityfields/container/dropDownProcess.js deleted file mode 100644 index 97ebc5fbaf0bdada4d7571bc882fcdc9fa2d99a5..0000000000000000000000000000000000000000 --- a/entity/KeywordAttribute_entity/entityfields/container/dropDownProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.result"); -import("Keyword_lib"); - -var res = KeywordUtils.getContainerNames().map(function(e){ - return [e, e];//currently the first column is ID, second view value - which is the same because there is no ID for keyword-containers -}); -result.object(res); \ No newline at end of file diff --git a/entity/KeywordAttribute_entity/entityfields/name/onValidation.js b/entity/KeywordAttribute_entity/entityfields/name/onValidation.js index b12c2615dc53fc1a9df233274bbf7eeae2f5caf4..a37ae57cf0a79ef02c3ab3c08f530128bcda2777 100644 --- a/entity/KeywordAttribute_entity/entityfields/name/onValidation.js +++ b/entity/KeywordAttribute_entity/entityfields/name/onValidation.js @@ -10,8 +10,8 @@ import("Entity_lib"); var validation = (function(){ if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW) return null; - var container = vars.get("$field.CONTAINER"); - if (container == "") + var category = vars.get("$field.AB_KEYWORD_CATEGORY_ID"); + if (category == "") return null; var name = vars.get("local.value"); if (name == "") @@ -19,12 +19,12 @@ var validation = (function(){ var alreadyExistingCount = newSelect("count(*)") .from("AB_KEYWORD_ATTRIBUTE") - .where("AB_KEYWORD_ATTRIBUTE.CONTAINER", container) + .where("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", category) .and("AB_KEYWORD_ATTRIBUTE.name", name) .cell() if (alreadyExistingCount != "0") - return translate.withArguments("Name \"%0\" already used for container \"%1\"", [name, container]); + return translate.withArguments("Name \"%0\" already used for container \"%1\"", [name, category]); return null; })(); diff --git a/entity/KeywordAttribute_entity/iconIdProcess.js b/entity/KeywordAttribute_entity/iconIdProcess.js index ef0457e780554daacf633e3381aff300f84e713c..4a0b4e8f7c8aacc31d3792851043560747d6b5d3 100644 --- a/entity/KeywordAttribute_entity/iconIdProcess.js +++ b/entity/KeywordAttribute_entity/iconIdProcess.js @@ -1,7 +1,7 @@ import("system.vars"); import("system.result"); -var container = vars.get("$field.CONTAINER"); +var container = vars.get("$field.AB_KEYWORD_CATEGORY_ID.displayValue"); if (container) result.string("TEXT:" + container); \ No newline at end of file diff --git a/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js index 15f1ee62a401226343c96a26c3a7b084e07a843b..bf912873fef170a0b5ce995f345b3722203e0446 100644 --- a/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js +++ b/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js @@ -3,7 +3,7 @@ import("system.db"); import("system.result"); import("Sql_lib"); -var cond = newWhereIfSet("AB_KEYWORD_ATTRIBUTE.CONTAINER", "$param.ContainerName_param"); +var cond = newWhereIfSet("AB_KEYWORD_CATEGORY.NAME", "$param.ContainerName_param"); //filter for entries that are already used by entry_id var entryIdForFilter = vars.get("$param.FilterAlreadyUsedByEntryId_param"); diff --git a/entity/KeywordAttribute_entity/recordcontainers/db/fromClauseProcess.js b/entity/KeywordAttribute_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a3e9dcd2e39e3de2b6e0b5b3987809ce130aa54d --- /dev/null +++ b/entity/KeywordAttribute_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Sql_lib"); + +var res = "AB_KEYWORD_ATTRIBUTE \n\ + join AB_KEYWORD_CATEGORY on (AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID = AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID)"; +result.string(res); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/KeywordCategory_entity.aod b/entity/KeywordCategory_entity/KeywordCategory_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..fb84b88df68c8861fce153afa44801416d21431f --- /dev/null +++ b/entity/KeywordCategory_entity/KeywordCategory_entity.aod @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>KeywordCategory_entity</name> + <title>Keyword Category</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:FILE_TREE_SMALL</icon> + <contentTitleProcess>%aditoprj%/entity/KeywordCategory_entity/contentTitleProcess.js</contentTitleProcess> + <iconId>VAADIN:FILE_TREE_SMALL</iconId> + <titlePlural>Keyword Categories</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + <usePermissions v="false" /> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>AB_KEYWORD_CATEGORYID</name> + <valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>NAME</name> + <title>Category Name</title> + <mandatory v="true" /> + <onValidation>%aditoprj%/entity/KeywordCategory_entity/entityfields/name/onValidation.js</onValidation> + </entityField> + <entityField> + <name>SORTINGBY</name> + <title>Sorting by</title> + <contentType>TEXT</contentType> + <mandatory v="true" /> + <dropDownProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/sortingby/dropDownProcess.js</dropDownProcess> + <valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/sortingby/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>SORTINGDIRECTION</name> + <title>Sorting direction</title> + <contentType>TEXT</contentType> + <mandatory v="true" /> + <dropDownProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/sortingdirection/dropDownProcess.js</dropDownProcess> + <valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/sortingdirection/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>AllKeywordCategoryProvider</name> + <lookupIdfield>AB_KEYWORD_CATEGORYID</lookupIdfield> + <sortingField>NAME</sortingField> + <dependencies> + <entityDependency> + <name>d93010a7-5c20-4144-8efb-8eb43c69b7b1</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>KeywordCategoryConsumer</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityConsumer> + <name>OrderedByNameFieldKeywordsConsumer</name> + <state>INVISIBLE</state> + <stateProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>OrderedByNameFieldKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>OrderedBySortingFieldKeywordsConsumer</name> + <state>INVISIBLE</state> + <stateProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>OrderedBySortingFieldKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>OrderedByNameFieldKeywords</name> + <consumer>OrderedByNameFieldKeywordsConsumer</consumer> + <state>AUTO</state> + </entityField> + <entityField> + <name>OrderedBySortingFieldKeywords</name> + <consumer>OrderedBySortingFieldKeywordsConsumer</consumer> + <state>AUTO</state> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <isPageable v="false" /> + <orderClauseProcess>%aditoprj%/entity/KeywordCategory_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <onDBInsert>%aditoprj%/entity/KeywordCategory_entity/recordcontainers/db/onDBInsert.js</onDBInsert> + <onDBUpdate>%aditoprj%/entity/KeywordCategory_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate> + <onDBDelete>%aditoprj%/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js</onDBDelete> + <alias>Data_alias</alias> + <cacheType>GLOBAL</cacheType> + <cacheKeyProcess>%aditoprj%/entity/KeywordCategory_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>NAME.value</name> + <recordfield>AB_KEYWORD_CATEGORY.NAME</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>AB_KEYWORD_CATEGORYID.value</name> + <recordfield>AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID</recordfield> + <isFilterable v="false" /> + <isLookupFilter v="false" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SORTINGBY.value</name> + <recordfield>AB_KEYWORD_CATEGORY.SORTINGBY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SORTINGDIRECTION.value</name> + <recordfield>AB_KEYWORD_CATEGORY.SORTINGDIRECTION</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>bd5b5591-863e-4e4d-8ac0-339112c7cbb8</name> + <tableName>AB_KEYWORD_CATEGORY</tableName> + <primaryKey>AB_KEYWORD_CATEGORYID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/KeywordCategory_entity/contentTitleProcess.js b/entity/KeywordCategory_entity/contentTitleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b270484a61c2a2ac80e254287f1bac8d4c3474aa --- /dev/null +++ b/entity/KeywordCategory_entity/contentTitleProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + + +result.string(vars.get("$field.NAME")); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/startdate/valueProcess.js b/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js similarity index 58% rename from entity/Salesproject_entity/entityfields/startdate/valueProcess.js rename to entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js index 047e11fdb49fe7a57518e928bd5e6436d9f10065..ad93cec3bf8be83cc92959219f4f810752413b7d 100644 --- a/entity/Salesproject_entity/entityfields/startdate/valueProcess.js +++ b/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js @@ -1,9 +1,9 @@ -import("system.vars"); -import("system.result"); import("system.neon"); -import("Date_lib"); +import("system.result"); +import("system.util"); +import("system.vars"); + -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) -{ - result.string(DateUtils.getTodayUTC()); -} \ No newline at end of file +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) { + result.string(util.getNewUUID()); +} diff --git a/entity/KeywordCategory_entity/entityfields/name/onValidation.js b/entity/KeywordCategory_entity/entityfields/name/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..e457534d5fe64d2a9f91cd940b2a6fdb7e560ea2 --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/name/onValidation.js @@ -0,0 +1,23 @@ +import("system.translate"); +import("system.result"); +import("system.db"); +import("system.vars"); +import("Sql_lib"); +import("Entity_lib"); + +var name = vars.get("local.value") + +//a KEY has always to be unique within one categoryId and since the user can specify the key on insert we've to ensure that it's unique +if (name) +{ + var uid = vars.get("$field.AB_KEYWORD_CATEGORYID"); + var alreadyExistantCount = newSelect("count(*)") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.NAME", name) + .andIfSet("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID", uid, SqlBuilder.NOT_EQUAL()) + .cell(); + + if (alreadyExistantCount != "0") + result.string(translate.text("The given Keyword Category Name is already used but needs to be unique")); + +} \ No newline at end of file diff --git a/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/children/containername_param/valueProcess.js b/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a7b35e011264275c0614ce65e3c70b2ac848746d --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/children/containername_param/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.result"); +import("system.vars"); + +//use the given keyword category name or use a dummy value, so that we do not get all Keyword entires from the KeywordEntry_entity (empty means "all" there) +var res = vars.get("$field.NAME") || util.getNewUUID(); +result.string(res); diff --git a/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/stateProcess.js b/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..96c49cb7507ce3557f4bc5bbd967b91044a745c6 --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/stateProcess.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + + +if (vars.get("$field.SORTINGBY") === "0" || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(neon.COMPONENTSTATE_INVISIBLE); +else + result.string(neon.COMPONENTSTATE_EDITABLE); diff --git a/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/children/containername_param/valueProcess.js b/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a7b35e011264275c0614ce65e3c70b2ac848746d --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/children/containername_param/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.result"); +import("system.vars"); + +//use the given keyword category name or use a dummy value, so that we do not get all Keyword entires from the KeywordEntry_entity (empty means "all" there) +var res = vars.get("$field.NAME") || util.getNewUUID(); +result.string(res); diff --git a/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/stateProcess.js b/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..312127b36af1bee37c5431a0c4f191e8cfc07941 --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/stateProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("system.entities"); + +var config = entities.createConfigForLoadingConsumerRows().consumer("OrderedBySortingFieldKeywordsConsumer") +var count = entities.getRowCount(config); + +if (vars.get("$field.SORTINGBY") === "0" && count > 0) + result.string(neon.COMPONENTSTATE_EDITABLE); +else + result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/entityfields/sortingby/dropDownProcess.js b/entity/KeywordCategory_entity/entityfields/sortingby/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7857949a704707c91123e2f9d922b23fcfc1bef0 --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/sortingby/dropDownProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.translate"); + + +result.object([ + ["0", translate.text("by sorting")], + ["1", translate.text("by name")], + ["2", translate.text("by translated name")], +]); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/entityfields/sortingby/valueProcess.js b/entity/KeywordCategory_entity/entityfields/sortingby/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2866c93908dc4786a1380517df31dcd16a388473 --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/sortingby/valueProcess.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + + +if(vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string("0"); +} \ No newline at end of file diff --git a/entity/KeywordCategory_entity/entityfields/sortingdirection/dropDownProcess.js b/entity/KeywordCategory_entity/entityfields/sortingdirection/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4a9d0a80be8899b9e8b0554edf180b33bc5e680a --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/sortingdirection/dropDownProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.translate"); + + +result.object([ + ["ASC", translate.text("ascending")], + ["DESC", translate.text("descending")] +]); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/entityfields/sortingdirection/valueProcess.js b/entity/KeywordCategory_entity/entityfields/sortingdirection/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e7bc0262d0999dac43bcb9854cc2c84d5107cf8d --- /dev/null +++ b/entity/KeywordCategory_entity/entityfields/sortingdirection/valueProcess.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + + +if(vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string("ASC"); +} \ No newline at end of file diff --git a/entity/KeywordCategory_entity/recordcontainers/db/cacheKeyProcess.js b/entity/KeywordCategory_entity/recordcontainers/db/cacheKeyProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..db72c61ec71e7181a23fc5ea9cbd95afff15d6dd --- /dev/null +++ b/entity/KeywordCategory_entity/recordcontainers/db/cacheKeyProcess.js @@ -0,0 +1,5 @@ +import("CachedRecordContainer_lib"); +import("system.result") + +var res = CachedRecordContainerUtils.getKeyWithPreset(CachedRecordContainerFieldPresets.STANDARD()); +result.string(res); diff --git a/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js b/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..9fb896f27e82dbcc7f7afcadf277a6a2383d6f24 --- /dev/null +++ b/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,15 @@ +import("system.vars"); +import("system.entities"); +import("Sql_lib"); + +var categoryId = vars.get("$local.uid"); + +newWhere("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID", newSelect("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID") + .from("AB_KEYWORD_ATTRIBUTE") + .where("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryId) + , SqlBuilder.IN()).deleteData(); +newWhere("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryId).deleteData(); +newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", categoryId).deleteData(); + +//dependecies are removed so the cache needs to be updated +entities.invalidateCache("KeywordEntry_entity", "db"); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/recordcontainers/db/onDBInsert.js b/entity/KeywordCategory_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..74e995d10911196cc51444fc37b5b25089494d12 --- /dev/null +++ b/entity/KeywordCategory_entity/recordcontainers/db/onDBInsert.js @@ -0,0 +1,4 @@ +import("system.entities"); + +//dependecies are updated so the cache needs to be updated +entities.invalidateCache("KeywordEntry_entity", "db"); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/recordcontainers/db/onDBUpdate.js b/entity/KeywordCategory_entity/recordcontainers/db/onDBUpdate.js new file mode 100644 index 0000000000000000000000000000000000000000..74e995d10911196cc51444fc37b5b25089494d12 --- /dev/null +++ b/entity/KeywordCategory_entity/recordcontainers/db/onDBUpdate.js @@ -0,0 +1,4 @@ +import("system.entities"); + +//dependecies are updated so the cache needs to be updated +entities.invalidateCache("KeywordEntry_entity", "db"); \ No newline at end of file diff --git a/entity/KeywordCategory_entity/recordcontainers/db/orderClauseProcess.js b/entity/KeywordCategory_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..12bc0d4f8b6254ac74e04bb5c6a94cd74d7f7c3c --- /dev/null +++ b/entity/KeywordCategory_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,6 @@ +import("system.db"); +import("system.result"); + +result.object({ + "AB_KEYWORD_CATEGORY.NAME": db.ASCENDING +}); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index b536bd882e441b80885db04a823f6ae86209c13d..0604749d96591ca6bcac5da852be07f170278f69 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> <name>KeywordEntry_entity</name> - <title>Keyword</title> + <title>Keyword Entry</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/KeywordEntry_entity/documentation.adoc</documentation> <siblings /> @@ -11,7 +11,7 @@ <onValidation>%aditoprj%/entity/KeywordEntry_entity/onValidation.js</onValidation> <iconId>VAADIN:KEY</iconId> <iconIdProcess>%aditoprj%/entity/KeywordEntry_entity/iconIdProcess.js</iconIdProcess> - <titlePlural>Keywords</titlePlural> + <titlePlural>Keyword Entries</titlePlural> <recordContainer>db</recordContainer> <entityFields> <entityProvider> @@ -43,12 +43,8 @@ <name>CONTAINER</name> <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/container/documentation.adoc</documentation> <title>Container</title> - <groupable v="true" /> - <mandatory v="true" /> - <dropDownProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/container/dropDownProcess.js</dropDownProcess> - <textInputAllowed v="true" /> <state>READONLY</state> - <stateProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/container/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/container/valueProcess.js</valueProcess> </entityField> <entityField> <name>AB_KEYWORD_ENTRYID</name> @@ -69,6 +65,11 @@ <name>TITLE</name> <title>Title (original language)</title> <mandatory v="true" /> + <onValueChangeTypes> + <element>MASK</element> + <element>PROCESS</element> + <element>PROCESS_SETVALUE</element> + </onValueChangeTypes> </entityField> <entityField> <name>SORTING</name> @@ -100,7 +101,7 @@ <name>SpecificContainerKeywords</name> <lookupIdfield>KEYID</lookupIdfield> <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc</documentation> - <recordContainer>db</recordContainer> + <recordContainer>jDito</recordContainer> <dependencies> <entityDependency> <name>bb48a3ee-f340-4fd4-8c80-ef73b765ab58</name> @@ -318,12 +319,6 @@ <fieldName>KeywordStates</fieldName> <isConsumer v="false" /> </entityDependency> - <entityDependency> - <name>3ca6d3c7-83d2-4761-bab4-50d2baecdbd6</name> - <entityName>Competition_entity</entityName> - <fieldName>KeywordPhases</fieldName> - <isConsumer v="false" /> - </entityDependency> <entityDependency> <name>1053a90d-574a-4ca2-b41d-42b513db0fd2</name> <entityName>Task_entity</entityName> @@ -636,6 +631,12 @@ <fieldName>AdviserRoles</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>eb5684f7-200a-401c-ac73-cc905a4d3f06</name> + <entityName>Competition_entity</entityName> + <fieldName>KeywordPhases</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> @@ -652,7 +653,7 @@ <entityField> <name>TITLE_TRANSLATED</name> <state>INVISIBLE</state> - <displayValueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/title_translated/displayValueProcess.js</displayValueProcess> + <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/title_translated/valueProcess.js</valueProcess> </entityField> <entityParameter> <name>OnlyActives_param</name> @@ -706,6 +707,73 @@ <name>BlacklistIds_param</name> <expose v="true" /> </entityParameter> + <entityField> + <name>AB_KEYWORD_CATEGORY_ID</name> + <title>Keyword Category</title> + <consumer>KeywordCategoryConsumer</consumer> + <groupable v="true" /> + <mandatory v="true" /> + <state>READONLY</state> + <stateProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>KeywordCategoryConsumer</name> + <dependency> + <name>dependency</name> + <entityName>KeywordCategory_entity</entityName> + <fieldName>AllKeywordCategoryProvider</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>UID</name> + <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/uid/documentation.adoc</documentation> + <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/uid/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>OrderedBySortingFieldKeywords</name> + <lookupIdfield>AB_KEYWORD_ENTRYID</lookupIdfield> + <sortingField>SORTING</sortingField> + <recordContainer>db</recordContainer> + <dependencies> + <entityDependency> + <name>f677c429-246a-4550-afc7-73dac953bfbf</name> + <entityName>KeywordCategory_entity</entityName> + <fieldName>OrderedBySortingFieldKeywordsConsumer</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + <children> + <entityParameter> + <name>ContainerName_param</name> + <expose v="true" /> + </entityParameter> + </children> + </entityProvider> + <entityProvider> + <name>OrderedByNameFieldKeywords</name> + <lookupIdfield>AB_KEYWORD_ENTRYID</lookupIdfield> + <recordContainer>jDito</recordContainer> + <dependencies> + <entityDependency> + <name>63218865-e3ef-4fb6-9f0a-3fef321ce30c</name> + <entityName>KeywordCategory_entity</entityName> + <fieldName>OrderedByNameFieldKeywordsConsumer</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + <children> + <entityParameter> + <name>ContainerName_param</name> + <expose v="true" /> + </entityParameter> + </children> + </entityProvider> + <entityField> + <name>KEYID_alwaysReadOnly</name> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/keyid_alwaysreadonly/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -715,7 +783,7 @@ <orderClauseProcess>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> <onDBDelete>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/db/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> - <cacheType>GLOBAL</cacheType> + <cacheType>SESSION</cacheType> <cacheKeyProcess>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess> <recordFieldMappings> <dbRecordFieldMapping> @@ -750,15 +818,17 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>CONTAINER.value</name> - <recordfield>AB_KEYWORD_ENTRY.CONTAINER</recordfield> + <expression>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/container.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>AB_KEYWORD_CATEGORY_ID.value</name> + <recordfield>AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID</recordfield> <isFilterable v="true" /> - <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>TITLE_TRANSLATED.value</name> - <recordfield>AB_KEYWORD_ENTRY.TITLE</recordfield> - <isFilterable v="false" /> - <isLookupFilter v="true" /> + <name>AB_KEYWORD_CATEGORY_ID.displayValue</name> + <expression>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/ab_keyword_category_id.displayvalue/expression.js</expression> + <columnAlias>CATEGORY_NAME</columnAlias> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> @@ -771,5 +841,24 @@ </linkInformation> </linkInformation> </dbRecordContainer> + <jDitoRecordContainer> + <name>jDito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <isSortable v="true" /> + <contentProcess>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <cacheType>SESSION</cacheType> + <cacheKeyProcess>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/jdito/cacheKeyProcess.js</cacheKeyProcess> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>KEYID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>TITLE.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> </recordContainers> </entity> diff --git a/entity/KeywordEntry_entity/contentTitleProcess.js b/entity/KeywordEntry_entity/contentTitleProcess.js index ff69ed4c6247006fb67bd75e3a8523df44274575..94d31040e5e27920293d2b9ec667d2feec61ff9e 100644 --- a/entity/KeywordEntry_entity/contentTitleProcess.js +++ b/entity/KeywordEntry_entity/contentTitleProcess.js @@ -2,4 +2,4 @@ import("system.translate"); import("system.vars"); import("system.result"); -result.string(translate.text(vars.get("$field.TITLE_TRANSLATED"))); \ No newline at end of file +result.string(vars.get("$field.TITLE_TRANSLATED")); diff --git a/entity/KeywordEntry_entity/documentation.adoc b/entity/KeywordEntry_entity/documentation.adoc index 17d50062e384d21fb406ad1bb5e200e17f70a37e..4ab5cadb129deccd73f0ff12d75fc0dc916c904a 100644 --- a/entity/KeywordEntry_entity/documentation.adoc +++ b/entity/KeywordEntry_entity/documentation.adoc @@ -12,14 +12,18 @@ Glossary [glossary] +Keyword Category (former Keyword container):: + A Keyword Category is the element that keeps several entries of Keyword entirestogether. That could be for example something like "Contact-Status". + Keyword Container:: - A keyword container is the element that keeps several entries of Keywords together. That could be for example something like "Contact-Status". Keep in mind that this done virtually and not in the actual way of storage. + This was once the group of a keyword entry list (like "Contact-Status"). Since this now done via the Keyword Category, the keyword container describes ++ the name of the Keyword Category Keyword Entry:: - A keyword entry is a specific child-element of a keyword container. For the upper example "Contact-Status" this could be "Active", "Inactive", etc. + A keyword entry is a specific child-element of a keyword category. For the upper example "Contact-Status" this could be "Active", "Inactive", etc. Keyword:: - Keyword describes the whole set of elements like keyword container and keyword entry. It's more like a virtual bracket for the whole construct. + Keyword describes the whole set of elements like keyword category and keyword entry. It's more like a virtual bracket for the whole construct. == Types of Keywords == @@ -38,13 +42,13 @@ digraph g { graph [ dpi = 100 ] node [ shape = box color="#dddddd" fontcolor="#dddddd" fontname = "Consolas"]; edge [ color="#dddddd" ] - { rank=max; kwdContainer [label="Keyword Container"] } + { rank=max; kwdCategory [label="Keyword Category"] } { rank=same; kwdEntry [label="Keyword Entry"] } { rank=next; entry1 [label="Entry 1" shape=ellipse] } { rank=same entry1; entryN [label="Entry N" shape=ellipse] } - kwdEntry -> kwdContainer; - kwdEntry -> kwdContainer; + kwdEntry -> kwdCategory; + kwdEntry -> kwdCategory; entry1 -> kwdEntry entryN -> kwdEntry } @@ -52,32 +56,58 @@ digraph g { Take a look at the following table. Beware that these are not the actual db-column-names but the information what's represented. +simplified, abstract representation how keywords are actually stored: -.simplified, abstract representation how keywords are actually stored +.Keyword Entry [options="header", cols="m,m,d,d"] |======= -|UID |key-ID |tile | container +|{set:cellbgcolor:!} + UID |key-ID |tile | Category-reference +|{set:cellbgcolor:#90b678} + unique key 1|1-key-value A|one|category_id1 +|unique key 2|2-key-value A|two|category_id1 +|unique key 3|3-key-value A|three|category_id1 +|{set:cellbgcolor:#b69e78 } + unique key 4|1-key-value B|I|category_id2 +|unique key 5|2-key-value B|II|category_id2 +|======= + +.Keyword Category +[options="header"] +|======= +|{set:cellbgcolor:!} + UID |Name | Sorting type |Sorting direction |{set:cellbgcolor:#90b678} - unique key 1|1-key-value A|one|container 1 -|unique key 2|2-key-value A|two|container 1 -|unique key 3|3-key-value A|three|container 1 + category_id1|Name 1| sort-type 1| sort-direction 1 |{set:cellbgcolor:#b69e78 } - unique key 4|1-key-value B|I|container 2 -|unique key 5|2-key-value B|II|container 2 + category_id2|Name 2| sort-type 2| sort-direction 2 |======= And, to clarify an example: +Simplified, example representation how keywords are acutllay stored: -.simplified, example representation how keywords are acutllay stored +.Keyword Entry [options="header", cols="m,m,d,d"] |======= |{set:cellbgcolor:! } - UID |key-ID |tile | container -|{set:cellbgcolor:#90b678}db1792cd|de-DE|German (Germany)|Language -|62df7f0ba|en-GB|English (United Kingdom)|Language -|126229d9|fr-FR|French (France)|Language -|{set:cellbgcolor:#b69e78 }3508929f|ab7b1885|active|ContactStatus -|52ce5785|2b2091eb|inactive|ContactStatus + UID |key-ID |tile | Category-reference +|{set:cellbgcolor:#90b678}db1792cd|de-DE|German (Germany)|3fd65 +|62df7f0ba|en-GB|English (United Kingdom)|3fd65 +|126229d9|fr-FR|French (France)|3fd65 +|{set:cellbgcolor:#b69e78 }3508929f|ab7b1885|active|85c1e +|52ce5785|2b2091eb|inactive|85c1e +|======= + + +.Keyword Category +[options="header"] +|======= +|{set:cellbgcolor:!} + UID |Name | Sorting type |Sorting direction +|{set:cellbgcolor:#90b678} + 3fd65|Language| Alphanumeric| ascending +|{set:cellbgcolor:#b69e78 } + 85c1e|Status| Manual | ascending |======= === Extended Key-Value lists with special Attributes === @@ -86,7 +116,7 @@ Basically this is an extension of the <<Simple Key-Value lists>>. Sometimes it's necessary to have some more properties within a keyword-entry. Example: -You've got a Keyword-container for Types of Communication with basically the following values: +You've got a Keyword-Category for Types of Communication with basically the following values: - mobile phone - landline phone diff --git a/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/displayValueProcess.js b/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..89b5e069dfebf45a710ac11a070f173c70d02bc2 --- /dev/null +++ b/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/displayValueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); + + +var containerName = KeywordUtils.getCategoryNameById(vars.get("$field.AB_KEYWORD_CATEGORY_ID")); + +result.string(containerName); diff --git a/entity/KeywordEntry_entity/entityfields/container/stateProcess.js b/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/stateProcess.js similarity index 87% rename from entity/KeywordEntry_entity/entityfields/container/stateProcess.js rename to entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/stateProcess.js index 82fc64847e6ac4e59a674fac7873eef6161aa741..65d7d8bc2a9e945613f1ceca3f51fe6c7b40c92f 100644 --- a/entity/KeywordEntry_entity/entityfields/container/stateProcess.js +++ b/entity/KeywordEntry_entity/entityfields/ab_keyword_category_id/stateProcess.js @@ -2,7 +2,7 @@ import("system.result"); import("system.neon"); import("system.vars"); -/*allowing the CONTAINER to change later would result in a lot of problems like +/*allowing the category to change later would result in a lot of problems like * - what happens to SORTING-value? * - what happens with already created keyword-attributerelations? * - what happens when a key is specified twice after the change? diff --git a/entity/KeywordEntry_entity/entityfields/container/documentation.adoc b/entity/KeywordEntry_entity/entityfields/container/documentation.adoc index e1cfb215ac798637843c387c914479f4428e301a..093cc57aa4359c533113f364f618a955d9ffa58f 100644 --- a/entity/KeywordEntry_entity/entityfields/container/documentation.adoc +++ b/entity/KeywordEntry_entity/entityfields/container/documentation.adoc @@ -1,2 +1,2 @@ - `CONTAINER` is the a name and used for grouping keyword-entries. This is was a keyword-container essentially is. -After creation of an entry it cannot be changed anymore. \ No newline at end of file + `CONTAINER` was used for grouping keyword-entries. +This is now represented by an entry in the `AB_KEYWORD_CATEGORY`-table. \ No newline at end of file diff --git a/entity/KeywordEntry_entity/entityfields/container/dropDownProcess.js b/entity/KeywordEntry_entity/entityfields/container/dropDownProcess.js deleted file mode 100644 index 97ebc5fbaf0bdada4d7571bc882fcdc9fa2d99a5..0000000000000000000000000000000000000000 --- a/entity/KeywordEntry_entity/entityfields/container/dropDownProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.result"); -import("Keyword_lib"); - -var res = KeywordUtils.getContainerNames().map(function(e){ - return [e, e];//currently the first column is ID, second view value - which is the same because there is no ID for keyword-containers -}); -result.object(res); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/entityfields/container/valueProcess.js b/entity/KeywordEntry_entity/entityfields/container/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..02b3bd7700586175fd4e2540208f8ee4a16d42d8 --- /dev/null +++ b/entity/KeywordEntry_entity/entityfields/container/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.AB_KEYWORD_CATEGORY_ID.displayValue")); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js b/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js index 07610f8551a05ff2f5694f37ed37a9da6618bc1a..cd4940f19fdd92c8ddaa01c4fe6fca7d2e41c773 100644 --- a/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js +++ b/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js @@ -5,18 +5,18 @@ import("system.vars"); import("Sql_lib"); import("Entity_lib"); -var container = vars.get("$field.CONTAINER"); +var categoryId = vars.get("$field.AB_KEYWORD_CATEGORY_ID"); var keyId = vars.get("local.value").trim(); -//a KEY has always to be unique within one container and since the user can specify the key on insert we've to ensure that it's unique -if (container && keyId) +//a KEY has always to be unique within one categoryId and since the user can specify the key on insert we've to ensure that it's unique +if (categoryId && keyId) { var selfEntryId = vars.get("$field.AB_KEYWORD_ENTRYID"); var sqlMasks = new SqlMaskingUtils(); var alreadyExistantEntryId = newSelect("AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID") .from("AB_KEYWORD_ENTRY") .where(sqlMasks.trim("AB_KEYWORD_ENTRY.KEYID"), keyId, null, SqlUtils.getSingleColumnType("AB_KEYWORD_ENTRY", "KEYID")) - .and("AB_KEYWORD_ENTRY.CONTAINER", container) + .and("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", categoryId) .and("AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", selfEntryId, SqlBuilder.NOT_EQUAL()) .cell(); diff --git a/entity/KeywordEntry_entity/entityfields/keyid_alwaysreadonly/valueProcess.js b/entity/KeywordEntry_entity/entityfields/keyid_alwaysreadonly/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a560a5517f1396643dc77b3790d9288def70d4b4 --- /dev/null +++ b/entity/KeywordEntry_entity/entityfields/keyid_alwaysreadonly/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.KEYID")); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/entityfields/title_translated/displayValueProcess.js b/entity/KeywordEntry_entity/entityfields/title_translated/valueProcess.js similarity index 50% rename from entity/KeywordEntry_entity/entityfields/title_translated/displayValueProcess.js rename to entity/KeywordEntry_entity/entityfields/title_translated/valueProcess.js index fd4ebefae48c5d8c702efce11cf8f778e88ea7d0..832a03f3d2e3015c9d9c4eb1e3ae79644fe2a4b0 100644 --- a/entity/KeywordEntry_entity/entityfields/title_translated/displayValueProcess.js +++ b/entity/KeywordEntry_entity/entityfields/title_translated/valueProcess.js @@ -2,5 +2,5 @@ import("system.result"); import("system.translate"); import("system.vars"); -var title = vars.get("$this.value"); -result.string(translate.text(title)); \ No newline at end of file +var title = vars.get("$field.TITLE"); +result.string(translate.text(title)); diff --git a/entity/KeywordEntry_entity/entityfields/uid/documentation.adoc b/entity/KeywordEntry_entity/entityfields/uid/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..8fcda674e10b1f60ff8430aa2ba83bb0b2ad1edd --- /dev/null +++ b/entity/KeywordEntry_entity/entityfields/uid/documentation.adoc @@ -0,0 +1,2 @@ +Dummy UID field to make jDito RecordContainer work. +It simply returns the value of AB_KEYWORD_ENTRYID, which is the actual UID. \ No newline at end of file diff --git a/entity/KeywordEntry_entity/entityfields/uid/valueProcess.js b/entity/KeywordEntry_entity/entityfields/uid/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5951f8d6e5f9ea1c8f173a8b2dde7f489aa73ca8 --- /dev/null +++ b/entity/KeywordEntry_entity/entityfields/uid/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result") +import("system.vars") + + +result.string(vars.get("$field.AB_KEYWORD_ENTRYID")); diff --git a/entity/KeywordEntry_entity/iconIdProcess.js b/entity/KeywordEntry_entity/iconIdProcess.js index ef0457e780554daacf633e3381aff300f84e713c..4a0b4e8f7c8aacc31d3792851043560747d6b5d3 100644 --- a/entity/KeywordEntry_entity/iconIdProcess.js +++ b/entity/KeywordEntry_entity/iconIdProcess.js @@ -1,7 +1,7 @@ import("system.vars"); import("system.result"); -var container = vars.get("$field.CONTAINER"); +var container = vars.get("$field.AB_KEYWORD_CATEGORY_ID.displayValue"); if (container) result.string("TEXT:" + container); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/onValidation.js b/entity/KeywordEntry_entity/onValidation.js index 463a84f18f8bcf21fe9539ab5041c31be8a7a958..ea935c52e323f18fbee12ac39e2bbbcf0e27dc2b 100644 --- a/entity/KeywordEntry_entity/onValidation.js +++ b/entity/KeywordEntry_entity/onValidation.js @@ -8,13 +8,13 @@ import("Sql_lib"); //TODO: this should no happen in onValidation; waiting for #1032668 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { - var keyContainer = vars.get("$field.CONTAINER"); - if (keyContainer) + var keywordCategory = vars.get("$field.AB_KEYWORD_CATEGORY_ID"); + if (keywordCategory) { var maskingHelper = new SqlMaskingUtils(); var newCodeNumber = newSelect(maskingHelper.max("AB_KEYWORD_ENTRY.SORTING")) .from("AB_KEYWORD_ENTRY") - .where("AB_KEYWORD_ENTRY.CONTAINER", keyContainer) + .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", keywordCategory) .cell(); newCodeNumber = Number(newCodeNumber);//if no number exists till no, start value will be 1 (due to: ++0) diff --git a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js index 90f58744de34c09de3164a324889dc3d3bf03859..785569f4ecc5c34f05e67133fb369baaaddf1808 100644 --- a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js +++ b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js @@ -1,10 +1,23 @@ +import("Keyword_lib"); import("Util_lib"); import("system.vars"); import("system.db"); import("system.result"); +import("system.tools"); import("Sql_lib"); -var cond = newWhereIfSet("AB_KEYWORD_ENTRY.CONTAINER", "$param.ContainerName_param"); + +var cond = newWhere(); +var category = vars.get("$param.ContainerName_param"); +if (category) +{ + var categoryId = KeywordUtils.getCategoryIdByName(category); + if (categoryId) + cond.and("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", categoryId); + else + cond.and("1=2"); +} + if (vars.get("$param.OnlyActives_param") == "true") { diff --git a/entity/KeywordEntry_entity/recordcontainers/db/orderClauseProcess.js b/entity/KeywordEntry_entity/recordcontainers/db/orderClauseProcess.js index e32403dc6e2df5902c3faeaf8f155a3b41a0f405..5a02e2d12c957ecfed1e5041c45eee1b970820b7 100644 --- a/entity/KeywordEntry_entity/recordcontainers/db/orderClauseProcess.js +++ b/entity/KeywordEntry_entity/recordcontainers/db/orderClauseProcess.js @@ -2,7 +2,7 @@ import("system.db"); import("system.result"); result.object({ - "AB_KEYWORD_ENTRY.CONTAINER": db.ASCENDING + "CATEGORY_NAME": db.ASCENDING//CATEGORY_NAME is an alias for the subselect result ,"AB_KEYWORD_ENTRY.SORTING": db.ASCENDING ,"AB_KEYWORD_ENTRY.TITLE": db.ASCENDING }); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/ab_keyword_category_id.displayvalue/expression.js b/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/ab_keyword_category_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..663dd8a028dcf043b0c40b203526fab207da2937 --- /dev/null +++ b/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/ab_keyword_category_id.displayvalue/expression.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var res = newSelect("AB_KEYWORD_CATEGORY.NAME") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID = AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID") + .toString(); +result.string(res); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/container.value/expression.js b/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/container.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..663dd8a028dcf043b0c40b203526fab207da2937 --- /dev/null +++ b/entity/KeywordEntry_entity/recordcontainers/db/recordfieldmappings/container.value/expression.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var res = newSelect("AB_KEYWORD_CATEGORY.NAME") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID = AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID") + .toString(); +result.string(res); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/recordcontainers/jdito/cacheKeyProcess.js b/entity/KeywordEntry_entity/recordcontainers/jdito/cacheKeyProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6bfdf07831c98f031ec47f82bc343659207b02e4 --- /dev/null +++ b/entity/KeywordEntry_entity/recordcontainers/jdito/cacheKeyProcess.js @@ -0,0 +1,5 @@ +import("CachedRecordContainer_lib"); +import("system.result") + +var res = CachedRecordContainerUtils.getCommonKey("$param.ContainerName_param","$param.OnlyActives_param"); +result.string(res); diff --git a/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7fa2f2e399d563df82aef2d74d90aa34ac3b7eb6 --- /dev/null +++ b/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,88 @@ +import("system.db"); +import("system.result"); +import("system.translate"); +import("system.util"); +import("system.vars"); +import("Sql_lib"); + + +var ENTRY_RESULT_INDEX_KEYID = 0; +var ENTRY_RESULT_INDEX_TITLE = 1; +var ENTRY_RESULT_INDEX_UID = 2; + +var CATEGORY_RESULT_INDEX_UID = 0; +var CATEGORY_RESULT_INDEX_NAME = 1; +var CATEGORY_RESULT_INDEX_SORTINGBY = 2; +var CATEGORY_RESULT_INDEX_SORTINGDIR = 3; + +var resultSet = []; +var keywordStatement = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE, AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID as UID") + .from("AB_KEYWORD_ENTRY") + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .where(); + +if (vars.get("$param.OnlyActives_param") == "true") +{ + keywordStatement.and("AB_KEYWORD_ENTRY.ISACTIVE", "1"); +} + +if(vars.exists("$param.ContainerName_param")) +{ + var containerParam = vars.get("$param.ContainerName_param"); + + var category = newSelect("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID, AB_KEYWORD_CATEGORY.NAME, AB_KEYWORD_CATEGORY.SORTINGBY, AB_KEYWORD_CATEGORY.SORTINGDIRECTION") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.NAME", containerParam) + .arrayRow(); + + var sortingDirection = category[CATEGORY_RESULT_INDEX_SORTINGDIR]; + var isSortingAsc = sortingDirection === "ASC"; + var sortingField = ""; + var isSortingByTranslatedTitle = false; + + switch(category[CATEGORY_RESULT_INDEX_SORTINGBY]) + { + case "1": + sortingField = "AB_KEYWORD_ENTRY.TITLE"; + break; + case "2": + sortingField = "AB_KEYWORD_ENTRY.TITLE"; + isSortingByTranslatedTitle = true; + break; + case "0": + default: + sortingField = "AB_KEYWORD_ENTRY.SORTING"; + break; + } + + + resultSet = keywordStatement + .and("AB_KEYWORD_CATEGORY.NAME", containerParam) + .orderBy(sortingField + " " + sortingDirection) + .table() + ; + + // If sorting is set to translated title (="2"), it must be done separately after DB query because translation can't be done in a query + if(isSortingByTranslatedTitle) + { + resultSet.sort(function(pFirst, pSecond) { + var titleA = translate.text(pFirst[CATEGORY_RESULT_INDEX_NAME]).toUpperCase(); + var titleB = translate.text(pSecond[CATEGORY_RESULT_INDEX_NAME]).toUpperCase(); + + if (titleA < titleB) { + return isSortingAsc ? -1 : 1; + } + if (titleA > titleB) { + return isSortingAsc ? 1 : -1; + } + + return 0; // Titles are equal + }); + } +} +else +{ + resultSet = keywordStatement.orderBy("AB_KEYWORD_ENTRY.SORTING asc").table(); +} + +result.object(resultSet); diff --git a/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod b/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod index b6d159ac4cf4fd8518c354cbee6bfb8d2e8ce82e..6b817307e82b88644ccaf5957c72db7d0606a134 100644 --- a/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod +++ b/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod @@ -58,17 +58,17 @@ </entityConsumer> <entityConsumer> <name>Objects</name> - <dependency> - <name>dependency</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>FilteredObjects</fieldName> - </dependency> <children> <entityParameter> <name>Entity_param</name> <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/objects/children/entity_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>ObjectProxy_entity</entityName> + <fieldName>FilteredObjects</fieldName> + </dependency> </entityConsumer> <entityParameter> <name>KnowledgeManagementId_param</name> @@ -79,14 +79,6 @@ <targetContextField>OBJECT_TYPE</targetContextField> <targetIdField>ROW_ID</targetIdField> <documentation>%aditoprj%/entity/KnowledgeLink_entity/entityfields/byknowledgeid/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>c3ed10c1-db55-4e55-9c18-2b8d400df033</name> - <entityName>KnowledgeManagement_entity</entityName> - <fieldName>LinksByKnowledgeId</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectType_param</name> @@ -97,6 +89,14 @@ <expose v="false" /> </entityParameter> </children> + <dependencies> + <entityDependency> + <name>c3ed10c1-db55-4e55-9c18-2b8d400df033</name> + <entityName>KnowledgeManagement_entity</entityName> + <fieldName>LinksByKnowledgeId</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> </entityProvider> <entityParameter> <name>RowId_param</name> diff --git a/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js b/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js index 3922264dc37d0431952c91c91192f7c422453e7e..d966bec94ff0f576e1a1517e1916610086f415c3 100644 --- a/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js +++ b/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js @@ -1,7 +1,8 @@ +import("system.translate"); import("system.neon"); import("system.vars"); import("system.result"); import("Context_lib"); if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$field.OBJECT_TYPE")) - result.string(ContextUtils.getTitle(vars.get("$field.OBJECT_TYPE"))); \ No newline at end of file + result.string(translate.text(ContextUtils.getTitle(vars.get("$field.OBJECT_TYPE")))); \ No newline at end of file diff --git a/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js b/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js index 3dbbcf620a10c6c02d3326da49ece763bf738dc5..40928962d866a6000dd320e2dd0a557621adabe2 100644 --- a/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js +++ b/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js @@ -7,5 +7,6 @@ import("Context_lib"); if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.ROW_ID")) { result.string(""); } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) { - result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.ROW_ID")))); + + result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.ROW_ID"))); } \ No newline at end of file diff --git a/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod index f3636542e0fcd54330d94ef590f6e7049adce027..4cc143f137158ab3bc3da5e2940ffca3b264e299 100644 --- a/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod +++ b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod @@ -8,6 +8,7 @@ <grantUpdateProcess>%aditoprj%/entity/KnowledgeManagement_entity/grantUpdateProcess.js</grantUpdateProcess> <grantDeleteProcess>%aditoprj%/entity/KnowledgeManagement_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/KnowledgeManagement_entity/contentTitleProcess.js</contentTitleProcess> + <afterUiInit>%aditoprj%/entity/KnowledgeManagement_entity/afterUiInit.js</afterUiInit> <afterOperatingState>%aditoprj%/entity/KnowledgeManagement_entity/afterOperatingState.js</afterOperatingState> <useFavorites v="true" /> <iconIdProcess>%aditoprj%/entity/KnowledgeManagement_entity/iconIdProcess.js</iconIdProcess> @@ -101,36 +102,44 @@ <refreshParent v="true" /> <state>EDITABLE</state> <onValidation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/onValidation.js</onValidation> - <dependency> - <name>dependency</name> - <entityName>KnowledgeManagementTags_entity</entityName> - <fieldName>ByKnowledgeManagementId</fieldName> - </dependency> <children> <entityParameter> <name>KnowledgeManagementId_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>KnowledgeManagementTags_entity</entityName> + <fieldName>ByKnowledgeManagementId</fieldName> + </dependency> </entityConsumer> <entityConsumer> <name>DiscussionsByKnowledgeId</name> <refreshParent v="true" /> - <dependency> - <name>dependency</name> - <entityName>KnowledgeDiscussion_entity</entityName> - <fieldName>ByKnowledgeId</fieldName> - </dependency> <children> <entityParameter> <name>KnowledgeId_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/discussionsbyknowledgeid/children/knowledgeid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>KnowledgeDiscussion_entity</entityName> + <fieldName>ByKnowledgeId</fieldName> + </dependency> </entityConsumer> <entityProvider> <name>Provider</name> <documentation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/provider/documentation.adoc</documentation> + <dependencies> + <entityDependency> + <name>20c983b0-4575-4bd3-83ce-477458ece62d</name> + <entityName>Product_entity</entityName> + <fieldName>KnowledgeManagements</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> </entityProvider> <entityConsumer> <name>PersonContacts</name> @@ -142,42 +151,37 @@ </entityConsumer> <entityConsumer> <name>KeywordKnowledgeType</name> - <dependency> - <name>dependency</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> - </dependency> <children> <entityParameter> <name>ContainerName_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/keywordknowledgetype/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>KeywordPublish</name> <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> <fieldName>SpecificContainerKeywords</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>KeywordPublish</name> <children> <entityParameter> <name>ContainerName_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/keywordpublish/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> </entityConsumer> <entityField> <name>indexTag</name> </entityField> <entityConsumer> <name>LinkedDocuments</name> - <dependency> - <name>dependency</name> - <entityName>Document_entity</entityName> - <fieldName>Documents</fieldName> - </dependency> <children> <entityParameter> <name>AssignmentTable_param</name> @@ -188,6 +192,11 @@ <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmentrowid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Document_entity</entityName> + <fieldName>Documents</fieldName> + </dependency> </entityConsumer> <entityActionField> <name>openEntryAsMail</name> @@ -195,22 +204,23 @@ <onActionProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/openentryasmail/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isSelectionAction v="true" /> + <iconId>VAADIN:ENVELOPE</iconId> <state>INVISIBLE</state> </entityActionField> <entityConsumer> <name>LinksByKnowledgeId</name> <refreshParent v="true" /> - <dependency> - <name>dependency</name> - <entityName>KnowledgeLink_entity</entityName> - <fieldName>ByKnowledgeId</fieldName> - </dependency> <children> <entityParameter> <name>KnowledgeManagementId_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linksbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>KnowledgeLink_entity</entityName> + <fieldName>ByKnowledgeId</fieldName> + </dependency> </entityConsumer> <entityField> <name>LastChange</name> @@ -219,17 +229,17 @@ </entityField> <entityConsumer> <name>LogHistories</name> - <dependency> - <name>dependency</name> - <entityName>LogHistory_entity</entityName> - <fieldName>LogHistoryProvider</fieldName> - </dependency> <children> <entityParameter> <name>tablenames_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>LogHistory_entity</entityName> + <fieldName>LogHistoryProvider</fieldName> + </dependency> </entityConsumer> <entityActionField> <name>exportHTML_action</name> @@ -271,11 +281,6 @@ <name>KnowledgeRoles</name> <stateProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/stateProcess.js</stateProcess> <onValidation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/onValidation.js</onValidation> - <dependency> - <name>dependency</name> - <entityName>KnowledgeRole_entity</entityName> - <fieldName>KnowledgeRole</fieldName> - </dependency> <children> <entityParameter> <name>KnowledgeManagement_param</name> @@ -287,14 +292,14 @@ <expose v="true" /> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>Tasks</name> <dependency> <name>dependency</name> - <entityName>Task_entity</entityName> - <fieldName>Tasks</fieldName> + <entityName>KnowledgeRole_entity</entityName> + <fieldName>KnowledgeRole</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>Tasks</name> <children> <entityParameter> <name>ObjectId_param</name> @@ -309,6 +314,11 @@ <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Task_entity</entityName> + <fieldName>Tasks</fieldName> + </dependency> </entityConsumer> <entityField> <name>RESPONSIBLE_CONTACT_ID</name> @@ -326,6 +336,14 @@ <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/publish/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/publish/displayValueProcess.js</displayValueProcess> </entityField> + <entityParameter> + <name>ObjectRowId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/KnowledgeManagement_entity/afterUiInit.js b/entity/KnowledgeManagement_entity/afterUiInit.js new file mode 100644 index 0000000000000000000000000000000000000000..d90e107fcd4e6770480fdf4fed9b89f5b75cecb9 --- /dev/null +++ b/entity/KnowledgeManagement_entity/afterUiInit.js @@ -0,0 +1,11 @@ +import("system.vars"); +import("system.neon"); + +if(vars.get("$param.ObjectRowId_param") && vars.get("$param.ObjectType_param")) +{ + neon.addRecord("LinksByKnowledgeId", + { + "ROW_ID": vars.get("$param.ObjectRowId_param"), + "OBJECT_TYPE": vars.get("$param.ObjectType_param") + }); +} diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js index d73eb83fe46705ad872645c30e31657f9aea9436..1fafde255863d73379c9939c0639ac59e0039645 100644 --- a/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js +++ b/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js @@ -23,4 +23,14 @@ if(vars.exists("$param.isDashlet_param") && vars.get("$param.isDashlet_param")) .and("KNOWLEDGETAG.TAG", "News"), SqlBuilder.EXISTS()); } +if(vars.get("$param.ObjectRowId_param") && vars.get("$param.ObjectType_param")) +{ + cond.and("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID", + newSelect("KNOWLEDGEMANAGEMENT_ID") + .from("KNOWLEDGELINK") + .where("KNOWLEDGELINK.OBJECT_TYPE", "$param.ObjectType_param") + .and("KNOWLEDGELINK.ROW_ID", "$param.ObjectRowId_param"), + SqlBuilder.IN()); +} + result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Leadimport_entity/Leadimport_entity.aod b/entity/Leadimport_entity/Leadimport_entity.aod index 1f79a0d182c36726786038ae468c2f973dd8066f..6dd8755383e13bf7bbebf6c77c00bf0e3f0688dc 100644 --- a/entity/Leadimport_entity/Leadimport_entity.aod +++ b/entity/Leadimport_entity/Leadimport_entity.aod @@ -68,7 +68,6 @@ <name>STATUS</name> <title>Status</title> <consumer>KeywordImportStatus</consumer> - <groupable v="true" /> <state>READONLY</state> <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/status/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/status/displayValueProcess.js</displayValueProcess> @@ -131,7 +130,6 @@ <entityField> <name>IMPORTSOURCE</name> <title>Import source</title> - <groupable v="true" /> <mandatory v="true" /> </entityField> <entityConsumer> diff --git a/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod b/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod index 8c8435662510366d7903876fd67e9fff1eae08d7..6ba0493ae1f7e53e1929d69f92b7ba88a086e031 100644 --- a/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod +++ b/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod @@ -65,6 +65,7 @@ <name>importDocuments</name> <title>Import Documents</title> <onActionProcess>%aditoprj%/entity/MSTeamsDocument_entity/entityfields/importdocuments/onActionProcess.js</onActionProcess> + <iconId>NEON:IMPORT</iconId> </entityActionField> </entityFields> <recordContainers> diff --git a/entity/MemberRoles_entity/recordcontainers/db/conditionProcess.js b/entity/MemberRoles_entity/recordcontainers/db/conditionProcess.js index b0f946ee1d5c070f85e8fb962a46326ad613a162..2a0cb647a2c2a8bd86844a719cefc1518c20c579 100644 --- a/entity/MemberRoles_entity/recordcontainers/db/conditionProcess.js +++ b/entity/MemberRoles_entity/recordcontainers/db/conditionProcess.js @@ -5,7 +5,7 @@ import("KeywordRegistry_basic"); import("Sql_lib"); import("Keyword_lib"); -var cond = newWhere("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.MemberRole()); +var cond = newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.MemberRole())); var usageFilter = vars.get("$param.UsageFilter_param"); diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod index d3b33e806249f971d6e31f5188fb9fe5615aa27a..63d29d339cf70bccf9e3e0ada83a04288168a083 100644 --- a/entity/Member_entity/Member_entity.aod +++ b/entity/Member_entity/Member_entity.aod @@ -436,6 +436,7 @@ <name>jdito</name> <jDitoRecordAlias>Data_alias</jDitoRecordAlias> <isFilterable v="true" /> + <isSortable v="true" /> <contentProcess>%aditoprj%/entity/Member_entity/recordcontainers/jdito/contentProcess.js</contentProcess> <onInsert>%aditoprj%/entity/Member_entity/recordcontainers/jdito/onInsert.js</onInsert> <onUpdate>%aditoprj%/entity/Member_entity/recordcontainers/jdito/onUpdate.js</onUpdate> diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod index f6805634c1275210bc82da9034e9d0d69677ed3e..a6d76f43b45ddca29ebe511c0aaba259817c1e1e 100644 --- a/entity/Notification_entity/Notification_entity.aod +++ b/entity/Notification_entity/Notification_entity.aod @@ -79,7 +79,7 @@ </entityField> <entityField> <name>LINKCONTEXT</name> - <groupable v="true" /> + <groupable v="false" /> <valueProcess>%aditoprj%/entity/Notification_entity/entityfields/linkcontext/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Notification_entity/entityfields/linkcontext/displayValueProcess.js</displayValueProcess> </entityField> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index f6cd1af9a2fffcd5e17c77cf3652c944844d8506..2c9c7faaccd7d4362f2c6409ec776ea7440a28aa 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -18,27 +18,6 @@ <titlePlural>Offers</titlePlural> <recordContainer>db</recordContainer> <entityFields> - <entityActionGroup> - <name>observeActionGroup</name> - <children> - <entityActionField> - <name>observe</name> - <title>Observe</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/observe/onActionProcess.js</onActionProcess> - <isObjectAction v="true" /> - <iconId>VAADIN:EYE</iconId> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/observe/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/observe/titleProcess.js</titleProcess> - </entityActionField> - <entityActionField> - <name>cancelObservation</name> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> - <iconId>VAADIN:EYE_SLASH</iconId> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/cancelobservation/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/cancelobservation/titleProcess.js</titleProcess> - </entityActionField> - </children> - </entityActionGroup> <entityProvider> <name>#PROVIDER</name> <dependencies> @@ -178,12 +157,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>newOfferVersion</name> - <title>New offer version</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newofferversion/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CART</iconId> - </entityActionField> <entityField> <name>NET</name> <title>Total net</title> @@ -213,12 +186,6 @@ <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/isolanguage/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/isolanguage/displayValueProcess.js</displayValueProcess> </entityField> - <entityActionField> - <name>copyOffer</name> - <title>Copy offer</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js</onActionProcess> - <iconId>VAADIN:COPY</iconId> - </entityActionField> <entityField> <name>VERSNR</name> <documentation>%aditoprj%/entity/Offer_entity/entityfields/versnr/documentation.adoc</documentation> @@ -250,13 +217,6 @@ <mandatory v="true" /> <description>PARAMETER</description> </entityParameter> - <entityActionField> - <name>showOffer</name> - <title>Show offer</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/showoffer/onActionProcess.js</onActionProcess> - <iconId>VAADIN:FILE_TEXT_O</iconId> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/showoffer/stateProcess.js</stateProcess> - </entityActionField> <entityField> <name>CONTACT_ORG_ID</name> <title>Company</title> @@ -376,12 +336,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>newOrder</name> - <title>Create receipt</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/neworder/onActionProcess.js</onActionProcess> - <iconId>VAADIN:DOLLAR</iconId> - </entityActionField> <entityConsumer> <name>Languages</name> <dependency> @@ -427,14 +381,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>newActivity</name> - <title>New activity</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newactivity/onActionProcess.js</onActionProcess> - <iconId>VAADIN:HOURGLASS_END</iconId> - <tooltip>New activity</tooltip> - <tooltipProcess>%aditoprj%/entity/Offer_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess> - </entityActionField> <entityProvider> <name>ContactOffers</name> <dependencies> @@ -550,12 +496,6 @@ <mandatory v="false" /> <description>PARAMETER</description> </entityParameter> - <entityActionField> - <name>newTask</name> - <title>New task</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newtask/onActionProcess.js</onActionProcess> - <iconId>VAADIN:TASKS</iconId> - </entityActionField> <entityField> <name>PAYMENTTERMS</name> <title>Payment term</title> @@ -969,13 +909,6 @@ <title>Letter salutation</title> <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/lettersalutation/stateProcess.js</stateProcess> </entityField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityProvider> <name>SentOffers</name> <children> @@ -996,14 +929,6 @@ <mandatory v="false" /> <documentation>%aditoprj%/entity/Offer_entity/entityfields/activityid_param/documentation.adoc</documentation> </entityParameter> - <entityActionField> - <name>startWorkflow</name> - <title>Start workflow</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> - <iconId>VAADIN:PLAY</iconId> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/startworkflow/stateProcess.js</stateProcess> - </entityActionField> <entityField> <name>OFFER_REPORT_DATA</name> <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/offer_report_data/valueProcess.js</valueProcess> @@ -1024,20 +949,6 @@ <fieldName>Contact</fieldName> </dependency> </entityConsumer> - <entityActionGroup> - <name>offerReportDispatch</name> - <children> - <entityActionField> - <name>dispatchOfferReport</name> - <title>Dispatch as mail</title> - <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <iconId>VAADIN:AT</iconId> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js</stateProcess> - </entityActionField> - </children> - </entityActionGroup> <entityConsumer> <name>Emails</name> <dependency> @@ -1120,6 +1031,95 @@ <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/discounted_vat/stateProcess.js</stateProcess> <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/discounted_vat/displayValueProcess.js</displayValueProcess> </entityField> + <entityActionGroup> + <name>observeActionGroup</name> + <children> + <entityActionField> + <name>observe</name> + <title>Observe</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/observe/onActionProcess.js</onActionProcess> + <isObjectAction v="true" /> + <iconId>VAADIN:EYE</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/observe/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/observe/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>cancelObservation</name> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> + <iconId>VAADIN:EYE_SLASH</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/cancelobservation/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Offer_entity/entityfields/observeactiongroup/children/cancelobservation/titleProcess.js</titleProcess> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>newOfferVersion</name> + <title>New offer version</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newofferversion/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CART</iconId> + </entityActionField> + <entityActionField> + <name>copyOffer</name> + <title>Copy offer</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js</onActionProcess> + <iconId>VAADIN:COPY</iconId> + </entityActionField> + <entityActionField> + <name>showOffer</name> + <title>Show offer</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/showoffer/onActionProcess.js</onActionProcess> + <iconId>VAADIN:FILE_TEXT_O</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/showoffer/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newOrder</name> + <title>Create receipt</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/neworder/onActionProcess.js</onActionProcess> + <iconId>VAADIN:DOLLAR</iconId> + </entityActionField> + <entityActionField> + <name>newActivity</name> + <title>New activity</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newactivity/onActionProcess.js</onActionProcess> + <iconId>VAADIN:HOURGLASS_END</iconId> + <tooltip>New activity</tooltip> + <tooltipProcess>%aditoprj%/entity/Offer_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>newTask</name> + <title>New task</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newtask/onActionProcess.js</onActionProcess> + <iconId>VAADIN:TASKS</iconId> + </entityActionField> + <entityActionField> + <name>startWorkflow</name> + <title>Start workflow</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> + <isSelectionAction v="true" /> + <iconId>VAADIN:PLAY</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/startworkflow/stateProcess.js</stateProcess> + </entityActionField> + <entityActionGroup> + <name>offerReportDispatch</name> + <children> + <entityActionField> + <name>dispatchOfferReport</name> + <title>Dispatch as mail</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> + <iconId>VAADIN:AT</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js</stateProcess> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Offer_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Offer_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index 4157abe2c850e42fb49e06207d907884670e46e2..63107e39aba496b0175d11ffbcc930fcef263d46 100644 --- a/entity/Offer_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/Offer_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("OFFER.OFFERID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.OFFER_OBJECTTYPE"); +var idcolumn = "OFFER.OFFERID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index 8dfae81c051655ab4de42593eeac63d2032cb48d..ef827841cebce70f7601b9afde2bd27621764a01 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -14,27 +14,6 @@ <titlePlural>Receipts</titlePlural> <recordContainer>db</recordContainer> <entityFields> - <entityActionGroup> - <name>observeActionGroup</name> - <children> - <entityActionField> - <name>observe</name> - <title>Observe</title> - <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/observe/onActionProcess.js</onActionProcess> - <isObjectAction v="true" /> - <iconId>VAADIN:EYE</iconId> - <stateProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/observe/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/observe/titleProcess.js</titleProcess> - </entityActionField> - <entityActionField> - <name>cancelObservation</name> - <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> - <iconId>VAADIN:EYE_SLASH</iconId> - <stateProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/cancelobservation/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/cancelobservation/titleProcess.js</titleProcess> - </entityActionField> - </children> - </entityActionGroup> <entityProvider> <name>#PROVIDER</name> <dependencies> @@ -818,6 +797,44 @@ <parentField>COUNT</parentField> <title>Count</title> </entityAggregateField> + <entityField> + <name>INFO</name> + <title>Info</title> + <contentType>LONG_TEXT</contentType> + </entityField> + <entityField> + <name>DATE_NEW</name> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + </entityField> + <entityField> + <name>ACTIVE</name> + </entityField> + <entityParameter> + <name>SourceOrderId_param</name> + <expose v="true" /> + </entityParameter> + <entityActionGroup> + <name>observeActionGroup</name> + <children> + <entityActionField> + <name>observe</name> + <title>Observe</title> + <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/observe/onActionProcess.js</onActionProcess> + <isObjectAction v="true" /> + <iconId>VAADIN:EYE</iconId> + <stateProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/observe/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/observe/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>cancelObservation</name> + <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> + <iconId>VAADIN:EYE_SLASH</iconId> + <stateProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/cancelobservation/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Order_entity/entityfields/observeactiongroup/children/cancelobservation/titleProcess.js</titleProcess> + </entityActionField> + </children> + </entityActionGroup> <entityActionField> <name>copyOrder</name> <documentation>%aditoprj%/entity/Order_entity/entityfields/copyorder/documentation.adoc</documentation> @@ -905,13 +922,6 @@ <iconId>VAADIN:FILE</iconId> <stateProcess>%aditoprj%/entity/Order_entity/entityfields/printreminder/stateProcess.js</stateProcess> </entityActionField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityActionGroup> <name>orderReportDispatch</name> <children> @@ -938,23 +948,13 @@ </entityActionField> </children> </entityActionGroup> - <entityField> - <name>INFO</name> - <title>Info</title> - <contentType>LONG_TEXT</contentType> - </entityField> - <entityField> - <name>DATE_NEW</name> - <contentType>DATE</contentType> - <resolution>DAY</resolution> - </entityField> - <entityField> - <name>ACTIVE</name> - </entityField> - <entityParameter> - <name>SourceOrderId_param</name> - <expose v="true" /> - </entityParameter> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Order_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Order_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index 647507498cf404c675a2a3225f36369d7012659d..7d1adc14150119dd7ff8be0b48535cccc4aadf52 100644 --- a/entity/Order_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/Order_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("SALESORDER.SALESORDERID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.ORDER_OBJECTTYPE"); +var idcolumn = "SALESORDER.SALESORDERID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 3923d173bd75cf88133639410306b38ea7ac26f2..07dea630082c21d0cba6341b9cd989752485f9ba 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -910,157 +910,6 @@ <colorProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/colorProcess.js</colorProcess> <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/valueProcess.js</valueProcess> </entityField> - <entityActionField> - <name>openEditDefaultsView</name> - <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/documentation.adoc</documentation> - <title>Edit defaults</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js</onActionProcess> - <actionOrder v="1" /> - <iconId>NEON:WRENCH</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>newOffer</name> - <documentation>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/documentation.adoc</documentation> - <title>New offer</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/onActionProcess.js</onActionProcess> - <actionOrder v="2" /> - <iconId>VAADIN:CART</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>newActivity</name> - <title>New activity</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/onActionProcess.js</onActionProcess> - <actionOrder v="0" /> - <iconId>VAADIN:HOURGLASS_END</iconId> - <tooltip>New activity</tooltip> - <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess> - </entityActionField> - <entityActionField> - <name>orgReport</name> - <title>Customer Base Sheet</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreport/onActionProcess.js</onActionProcess> - <actionOrder v="4" /> - <iconId>VAADIN:FILE_TEXT_O</iconId> - </entityActionField> - <entityActionField> - <name>newTask</name> - <title>New task</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newtask/onActionProcess.js</onActionProcess> - <actionOrder v="3" /> - <iconId>VAADIN:TASKS</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newtask/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>newAppointment</name> - <title>New appointment</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CALENDAR</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/stateProcess.js</stateProcess> - <tooltip>New Appointment</tooltip> - </entityActionField> - <entityActionGroup> - <name>filterViewActionGroup</name> - <documentation>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/documentation.adoc</documentation> - <title>Serial Actions</title> - <iconId>NEON:GROUP_APPOINTMENT</iconId> - <children> - <entityActionField> - <name>cancelObservation</name> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> - <iconId>VAADIN:EYE_SLASH</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/cancelobservation/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/cancelobservation/titleProcess.js</titleProcess> - </entityActionField> - <entityActionField> - <name>observe</name> - <title>Observe</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/observe/onActionProcess.js</onActionProcess> - <isObjectAction v="true" /> - <iconId>VAADIN:EYE</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/observe/titleProcess.js</titleProcess> - </entityActionField> - <entityActionField> - <name>addToCampaignFromTable</name> - <title>Add to Campaign</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <isSelectionAction v="false" /> - <iconId>NEON:GROUP_APPOINTMENT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/stateProcess.js</stateProcess> - <tooltip>Add the selection to a campaign</tooltip> - <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/tooltipProcess.js</tooltipProcess> - </entityActionField> - <entityActionField> - <name>addToBulkMailFromTable</name> - <title>Add to Bulkmail</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtobulkmailfromtable/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:AT</iconId> - <state>EDITABLE</state> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtobulkmailfromtable/stateProcess.js</stateProcess> - <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtobulkmailfromtable/tooltipProcess.js</tooltipProcess> - </entityActionField> - <entityActionField> - <name>addToSerialLetter</name> - <title>Add to serial letter</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtoserialletter/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:ENVELOPES</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtoserialletter/stateProcess.js</stateProcess> - <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtoserialletter/tooltipProcess.js</tooltipProcess> - </entityActionField> - <entityActionField> - <name>export</name> - <title>Export</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <iconId>NEON:EXPORT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/stateProcess.js</stateProcess> - <tooltip>Export fields of this table</tooltip> - <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/tooltipProcess.js</tooltipProcess> - </entityActionField> - <entityActionField> - <name>startMarketingWorkflows</name> - <title>Start marketing mailing</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:ENVELOPES</iconId> - </entityActionField> - </children> - </entityActionGroup> - <entityActionField> - <name>addToCampaign</name> - <title>Add to Campaign</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/addtocampaign/onActionProcess.js</onActionProcess> - <iconId>NEON:GROUP_APPOINTMENT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/addtocampaign/stateProcess.js</stateProcess> - <tooltip>Choose a campaign and a step to add the contact to a campaign</tooltip> - </entityActionField> - <entityActionField> - <name>newEmail</name> - <title>Write email</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newemail/onActionProcess.js</onActionProcess> - <iconId>VAADIN:AT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newemail/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>newLetter</name> - <title>New letter</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/onActionProcess.js</onActionProcess> - <iconId>VAADIN:ENVELOPE</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityProvider> <name>SelfDuplicates</name> <documentation>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc</documentation> @@ -1120,52 +969,6 @@ <name>DuplicateCurrentContactId_param</name> <expose v="true" /> </entityParameter> - <entityActionGroup> - <name>DuplicateActions</name> - <title>Duplicate actions</title> - <state>AUTO</state> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js</stateProcess> - <children> - <entityActionField> - <name>IntegrateSelectedIntoCurrentAction</name> - <title>Integrate selected into current contact</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>NEON:IMPORT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IntegrateCurrentIntoSelectedAction</name> - <title>Integrate current into selected contact</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>NEON:EXPORT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IgnoreDuplicate</name> - <title>Ignore Duplicate</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>VAADIN:CLOSE</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IgnoreWholeCluster</name> - <title>Ignore whole Cluster</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:CLOSE</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess> - </entityActionField> - </children> - </entityActionGroup> <entityField> <name>STANDARD_COUNTRY</name> <title>Standard Country</title> @@ -1480,56 +1283,6 @@ </entityParameter> </children> </entityProvider> - <entityActionField> - <name>startWorkflow</name> - <title>Start workflow</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> - <iconId>VAADIN:PLAY</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/startworkflow/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>newVisitRecommendation</name> - <title>New Visit Recommendation</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CALENDAR</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>newVisitPlanEntry</name> - <title>New Weekplanentry</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CAR</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>openLocation</name> - <title>Open Location</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openlocation/onActionProcess.js</onActionProcess> - <iconId>NEON:TACKED</iconId> - </entityActionField> - <entityActionField> - <name>openAroundLocation</name> - <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/documentation.adoc</documentation> - <title>Radius Search</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> - <iconId>VAADIN:LOCATION_ARROW_CIRCLE_O</iconId> - <state>DISABLED</state> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/stateProcess.js</stateProcess> - </entityActionField> - <entityActionGroup> - <name>orgReportDispatch</name> - <children> - <entityActionField> - <name>dispatchOrgReport</name> - <title>Dispatch as mail</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:AT</iconId> - <iconIdProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/iconIdProcess.js</iconIdProcess> - </entityActionField> - </children> - </entityActionGroup> <entityConsumer> <name>AttributesFilter</name> <dependency> @@ -1591,6 +1344,253 @@ </entityParameter> </children> </entityConsumer> + <entityActionField> + <name>openEditDefaultsView</name> + <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/documentation.adoc</documentation> + <title>Edit defaults</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js</onActionProcess> + <actionOrder v="1" /> + <iconId>NEON:WRENCH</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newOffer</name> + <documentation>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/documentation.adoc</documentation> + <title>New offer</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/onActionProcess.js</onActionProcess> + <actionOrder v="2" /> + <iconId>VAADIN:CART</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newActivity</name> + <title>New activity</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/onActionProcess.js</onActionProcess> + <actionOrder v="0" /> + <iconId>VAADIN:HOURGLASS_END</iconId> + <tooltip>New activity</tooltip> + <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>orgReport</name> + <title>Customer Base Sheet</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreport/onActionProcess.js</onActionProcess> + <actionOrder v="4" /> + <iconId>VAADIN:FILE_TEXT_O</iconId> + </entityActionField> + <entityActionField> + <name>newTask</name> + <title>New task</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newtask/onActionProcess.js</onActionProcess> + <actionOrder v="3" /> + <iconId>VAADIN:TASKS</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newtask/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newAppointment</name> + <title>New appointment</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CALENDAR</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/stateProcess.js</stateProcess> + <tooltip>New Appointment</tooltip> + </entityActionField> + <entityActionGroup> + <name>filterViewActionGroup</name> + <documentation>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/documentation.adoc</documentation> + <title>Serial Actions</title> + <iconId>NEON:GROUP_APPOINTMENT</iconId> + <children> + <entityActionField> + <name>cancelObservation</name> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> + <iconId>VAADIN:EYE_SLASH</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/cancelobservation/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/cancelobservation/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>observe</name> + <title>Observe</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/observe/onActionProcess.js</onActionProcess> + <isObjectAction v="true" /> + <iconId>VAADIN:EYE</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/observe/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>addToCampaignFromTable</name> + <title>Add to Campaign</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <isSelectionAction v="false" /> + <iconId>NEON:GROUP_APPOINTMENT</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/stateProcess.js</stateProcess> + <tooltip>Add the selection to a campaign</tooltip> + <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>addToBulkMailFromTable</name> + <title>Add to Bulkmail</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtobulkmailfromtable/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:AT</iconId> + <state>EDITABLE</state> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtobulkmailfromtable/stateProcess.js</stateProcess> + <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtobulkmailfromtable/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>addToSerialLetter</name> + <title>Add to serial letter</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtoserialletter/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:ENVELOPES</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtoserialletter/stateProcess.js</stateProcess> + <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtoserialletter/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>export</name> + <title>Export</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> + <iconId>NEON:EXPORT</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/stateProcess.js</stateProcess> + <tooltip>Export fields of this table</tooltip> + <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>startMarketingWorkflows</name> + <title>Start marketing mailing</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:ENVELOPES</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>addToCampaign</name> + <title>Add to Campaign</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/addtocampaign/onActionProcess.js</onActionProcess> + <iconId>NEON:GROUP_APPOINTMENT</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/addtocampaign/stateProcess.js</stateProcess> + <tooltip>Choose a campaign and a step to add the contact to a campaign</tooltip> + </entityActionField> + <entityActionField> + <name>newEmail</name> + <title>Write email</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newemail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:AT</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newemail/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newLetter</name> + <title>New letter</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ENVELOPE</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/stateProcess.js</stateProcess> + </entityActionField> + <entityActionGroup> + <name>DuplicateActions</name> + <title>Duplicate actions</title> + <state>AUTO</state> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js</stateProcess> + <children> + <entityActionField> + <name>IntegrateSelectedIntoCurrentAction</name> + <title>Integrate selected into current contact</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> + <isSelectionAction v="true" /> + <iconId>NEON:IMPORT</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>IntegrateCurrentIntoSelectedAction</name> + <title>Integrate current into selected contact</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> + <isSelectionAction v="true" /> + <iconId>NEON:EXPORT</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>IgnoreDuplicate</name> + <title>Ignore Duplicate</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> + <isSelectionAction v="true" /> + <iconId>VAADIN:CLOSE</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>IgnoreWholeCluster</name> + <title>Ignore whole Cluster</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:CLOSE</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>startWorkflow</name> + <title>Start workflow</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PLAY</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/startworkflow/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newVisitRecommendation</name> + <title>New Visit Recommendation</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CALENDAR</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newVisitPlanEntry</name> + <title>New Weekplanentry</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CAR</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>openLocation</name> + <title>Open Location</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openlocation/onActionProcess.js</onActionProcess> + <iconId>NEON:TACKED</iconId> + </entityActionField> + <entityActionField> + <name>openAroundLocation</name> + <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/documentation.adoc</documentation> + <title>Radius Search</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/onActionProcess.js</onActionProcess> + <isSelectionAction v="true" /> + <iconId>VAADIN:LOCATION_ARROW_CIRCLE_O</iconId> + <state>DISABLED</state> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/stateProcess.js</stateProcess> + </entityActionField> + <entityActionGroup> + <name>orgReportDispatch</name> + <children> + <entityActionField> + <name>dispatchOrgReport</name> + <title>Dispatch as mail</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:AT</iconId> + <iconIdProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/iconIdProcess.js</iconIdProcess> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js index d42520a347c8e8d594fb1af389acb8af1a2e824c..888ac0657242f41866a37f471b9765b045b52594 100644 --- a/entity/Organisation_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js @@ -1,19 +1,27 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); + +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); +var objecttype = vars.get("$field.ORGANISATION_OBJECTTYPE"); +var idcolumn = "ORGANISATION.ORGANISATIONID"; + + +var rowIds = FavoritesUtil.getRowIdsOfFavorites(objecttype, operator, rawvalue); +var preparedIds = []; for(i = 0; i < rowIds.length; i++) { - var orga_id = new SqlBuilder().select("CONTACT.ORGANISATION_ID") + var person_id = new SqlBuilder().select("CONTACT.ORGANISATION_ID") .from("CONTACT") .where(newWhere("CONTACT.CONTACTID", rowIds[i])) .arrayColumn(); - if(orga_id.length > 0) - favoFilterCond.or("ORGANISATION.ORGANISATIONID", orga_id[0], SqlBuilder.EQUAL()); + if(person_id.length > 0) + preparedIds.push(person_id[0]); } -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn, preparedIds)); \ No newline at end of file diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index fe9f61c2f7b5a8cbe9b2647379015e641ea96be1..7f6c58e19e2c1da276d51145f93d1d2cdc1daf4d 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -913,6 +913,7 @@ <title>Company</title> <consumer>Organisations</consumer> <linkedContextProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/linkedContextProcess.js</linkedContextProcess> + <stateProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js</displayValueProcess> <onValidation>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/onValidation.js</onValidation> @@ -1217,6 +1218,41 @@ </entityParameter> </children> </entityConsumer> + <entityProvider> + <name>ebdb88f5-f030-426c-b261-9f3828d19356</name> + <dependencies> + <entityDependency> + <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name> + <entityName>Member_entity</entityName> + <fieldName>Contacts</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityConsumer> + <name>Orders</name> + <documentation>%aditoprj%/entity/Person_entity/entityfields/orders/documentation.adoc</documentation> + <dependency> + <name>dependency</name> + <entityName>Order_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/orders/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>BIRTHDAY</name> + <title>Birthday</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + <outputFormat>dd.MM.</outputFormat> + <inputFormat>dd.MM.</inputFormat> + <state>READONLY</state> + </entityField> <entityActionField> <name>openEditDefaultsView</name> <title>Edit defaults</title> @@ -1332,6 +1368,20 @@ <stateProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/cancelobservation/stateProcess.js</stateProcess> <titleProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/cancelobservation/titleProcess.js</titleProcess> </entityActionField> + <entityActionField> + <name>addToContactSync</name> + <title>add Contact to Sync</title> + <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/addtocontactsync/onActionProcess.js</onActionProcess> + <iconId>NEON:RECURRING_APPOINTMENT</iconId> + <state>EDITABLE</state> + </entityActionField> + <entityActionField> + <name>removeFromContactSync</name> + <title>remove Contact from Sync</title> + <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/removefromcontactsync/onActionProcess.js</onActionProcess> + <iconId>NEON:RECURRING_APPOINTMENT_MOVED</iconId> + <state>AUTO</state> + </entityActionField> </children> </entityActionGroup> <entityActionGroup> @@ -1409,13 +1459,6 @@ <iconId>VAADIN:PLAY</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/startworkflow/stateProcess.js</stateProcess> </entityActionField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityActionField> <name>newVisitrecommendation</name> <title>New Visit Recommendation</title> @@ -1430,32 +1473,6 @@ <iconId>VAADIN:CAR</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js</stateProcess> </entityActionField> - <entityProvider> - <name>ebdb88f5-f030-426c-b261-9f3828d19356</name> - <dependencies> - <entityDependency> - <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name> - <entityName>Member_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - </entityProvider> - <entityConsumer> - <name>Orders</name> - <documentation>%aditoprj%/entity/Person_entity/entityfields/orders/documentation.adoc</documentation> - <dependency> - <name>dependency</name> - <entityName>Order_entity</entityName> - <fieldName>#PROVIDER</fieldName> - </dependency> - <children> - <entityParameter> - <name>ContactId_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/orders/children/contactid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityActionField> <name>deleteFunction</name> <title>Delete this Function</title> @@ -1463,15 +1480,13 @@ <iconId>NEON:TRASH</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/deletefunction/stateProcess.js</stateProcess> </entityActionField> - <entityField> - <name>BIRTHDAY</name> - <title>Birthday</title> - <contentType>DATE</contentType> - <resolution>DAY</resolution> - <outputFormat>dd.MM.</outputFormat> - <inputFormat>dd.MM.</inputFormat> - <state>READONLY</state> - </entityField> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Person_entity/entityfields/attributes/children/showdsgvomessage_param/valueProcess.js b/entity/Person_entity/entityfields/attributes/children/showdsgvomessage_param/valueProcess.js index fce9fde135bfde9221a9956f545862641098ff7c..c96eec50f67631c175c60d748ded5821644aea70 100644 --- a/entity/Person_entity/entityfields/attributes/children/showdsgvomessage_param/valueProcess.js +++ b/entity/Person_entity/entityfields/attributes/children/showdsgvomessage_param/valueProcess.js @@ -2,4 +2,4 @@ import("system.vars"); import("system.neon"); import("system.result"); -result.string(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW); \ No newline at end of file +result.string(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/communications/children/showdsgvomessage_param/valueProcess.js b/entity/Person_entity/entityfields/communications/children/showdsgvomessage_param/valueProcess.js index fce9fde135bfde9221a9956f545862641098ff7c..c96eec50f67631c175c60d748ded5821644aea70 100644 --- a/entity/Person_entity/entityfields/communications/children/showdsgvomessage_param/valueProcess.js +++ b/entity/Person_entity/entityfields/communications/children/showdsgvomessage_param/valueProcess.js @@ -2,4 +2,4 @@ import("system.vars"); import("system.neon"); import("system.result"); -result.string(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW); \ No newline at end of file +result.string(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/filterviewactiongroup/children/addtocontactsync/onActionProcess.js b/entity/Person_entity/entityfields/filterviewactiongroup/children/addtocontactsync/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3ba5646790e532ee17f5d19d6fd57fbaece4a4d1 --- /dev/null +++ b/entity/Person_entity/entityfields/filterviewactiongroup/children/addtocontactsync/onActionProcess.js @@ -0,0 +1,4 @@ +import("EwsClientSync_lib"); +import("system.vars"); + +EwsClientSyncUtils.openEwsSyncAddContactView(vars.get("$sys.selection"), vars.get("$sys.filter"), "ADD"); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/filterviewactiongroup/children/removefromcontactsync/onActionProcess.js b/entity/Person_entity/entityfields/filterviewactiongroup/children/removefromcontactsync/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1c6e00c85cdc5ec2423caf9c9f046f3fb7305168 --- /dev/null +++ b/entity/Person_entity/entityfields/filterviewactiongroup/children/removefromcontactsync/onActionProcess.js @@ -0,0 +1,4 @@ +import("EwsClientSync_lib"); +import("system.vars"); + +EwsClientSyncUtils.openEwsSyncAddContactView(vars.get("$sys.selection"), vars.get("$sys.filter"), "REMOVE"); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/organisation_contactid/stateProcess.js b/entity/Person_entity/entityfields/organisation_contactid/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7d8abdebb5fe1f2471641ff52029303f559bc3e1 --- /dev/null +++ b/entity/Person_entity/entityfields/organisation_contactid/stateProcess.js @@ -0,0 +1,23 @@ +import("Context_lib"); +import("system.vars"); +import("system.result"); +import("Entity_lib"); +import("system.neon"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) { + +var currentContext = ContextUtils.getCurrentContextId(); +var contactId = vars.get("$field.CONTACTID"); + +var linkedObject = new HasLinkedObjectTester() +.andNoEntityRows("Activity_entity", "LinkedObjects", {ObjectId_param : currentContext, RowId_param : contactId}) +.andNoEntityRows("360Degree_entity", "PersonObjects", {ObjectRowId_param : contactId , ObjectStatus_param : vars.get("$field.STATUS")}) +.andNoEntityRows("ObjectTree_entity", "TreeProvider", {ObjectIds_param : [vars.get("$field.CONTACTID"), vars.get("$field.PERSON_ID")], ObjectTypes_param : currentContext}) +//.andNoEntityRows("AttributeRelation_entity", "TreeProvider", {ObjectRowId_param : contactId, ObjectType_param : currentContext}) +//.andNoEntityRows("DistrictResponsible_entity", "OrganisationResponsibles", {OrgUid_param : vars.get("$field.ORGANISATION_CONTACTID")}) //District Responsible and Object Tree is default data record +.andNoEntityRows("Document_entity", "Documents", {AssignmentRowId_param : contactId, AssignmentTable_param : "RELATION"}) +.validate() + +if(!linkedObject) + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/persaddresses/children/showdsgvomessage_param/valueProcess.js b/entity/Person_entity/entityfields/persaddresses/children/showdsgvomessage_param/valueProcess.js index fce9fde135bfde9221a9956f545862641098ff7c..c96eec50f67631c175c60d748ded5821644aea70 100644 --- a/entity/Person_entity/entityfields/persaddresses/children/showdsgvomessage_param/valueProcess.js +++ b/entity/Person_entity/entityfields/persaddresses/children/showdsgvomessage_param/valueProcess.js @@ -2,4 +2,4 @@ import("system.vars"); import("system.neon"); import("system.result"); -result.string(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW); \ No newline at end of file +result.string(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js index 26e0adde33d17eab1378a9d8aa4cfee3eea401bb..0c4956dc698a76bdf4426e973ffeb5237ad7d641 100644 --- a/entity/Person_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js +++ b/entity/Person_entity/recordcontainers/db/filterextensions/favorites_filter/filterConditionProcess.js @@ -1,9 +1,17 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); + +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); +var objecttype = vars.get("$field.PERSON_OBJECTTYPE"); +var idcolumn = "PERSON.PERSONID"; + + +var rowIds = FavoritesUtil.getRowIdsOfFavorites(objecttype, operator, rawvalue); +var preparedIds = []; for(i = 0; i < rowIds.length; i++) { @@ -13,7 +21,7 @@ for(i = 0; i < rowIds.length; i++) .arrayColumn(); if(person_id.length > 0) - favoFilterCond.or("PERSON.PERSONID", person_id[0], SqlBuilder.EQUAL()); + preparedIds.push(person_id[0]); } -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn, preparedIds)); diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index ca4176de292d0ae2785c0893771fea157d081b11..30137332d48b8cba0ae3d6d9efe4c48b9d3c8b83 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -109,46 +109,46 @@ </entityField> <entityConsumer> <name>Organisations</name> - <dependency> - <name>dependency</name> - <entityName>Organisation_entity</entityName> - <fieldName>Organisations</fieldName> - </dependency> <children> <entityParameter> <name>OrganisationType_param</name> <valueProcess>%aditoprj%/entity/Product_entity/entityfields/organisations/children/organisationtype_param/valueProcess.js</valueProcess> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>Productprices</name> <dependency> <name>dependency</name> - <entityName>Productprice_entity</entityName> - <fieldName>Productprices</fieldName> + <entityName>Organisation_entity</entityName> + <fieldName>Organisations</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>Productprices</name> <children> <entityParameter> <name>ProductId_param</name> <valueProcess>%aditoprj%/entity/Product_entity/entityfields/productprices/children/productid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Productprice_entity</entityName> + <fieldName>Productprices</fieldName> + </dependency> </entityConsumer> <entityConsumer> <name>Stocks</name> <selectionMode>SINGLE</selectionMode> - <dependency> - <name>dependency</name> - <entityName>Stock_entity</entityName> - <fieldName>Stocks</fieldName> - </dependency> <children> <entityParameter> <name>ProductId_param</name> <valueProcess>%aditoprj%/entity/Product_entity/entityfields/stocks/children/productid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Stock_entity</entityName> + <fieldName>Stocks</fieldName> + </dependency> </entityConsumer> <entityField> <name>PICTURE</name> @@ -157,17 +157,17 @@ <entityConsumer> <name>StockCounts</name> <state>READONLY</state> - <dependency> - <name>dependency</name> - <entityName>Stock_entity</entityName> - <fieldName>Stocks</fieldName> - </dependency> <children> <entityParameter> <name>ProductId_param</name> <valueProcess>%aditoprj%/entity/Product_entity/entityfields/stockcounts/children/productid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Stock_entity</entityName> + <fieldName>Stocks</fieldName> + </dependency> </entityConsumer> <entityProvider> <name>#PROVIDER</name> @@ -201,11 +201,6 @@ </entityProvider> <entityConsumer> <name>ProductLinks</name> - <dependency> - <name>dependency</name> - <entityName>Prod2prod_entity</entityName> - <fieldName>ProductLinks</fieldName> - </dependency> <children> <entityParameter> <name>ProductId_param</name> @@ -214,6 +209,11 @@ <mandatory v="true" /> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Prod2prod_entity</entityName> + <fieldName>ProductLinks</fieldName> + </dependency> </entityConsumer> <entityField> <name>CONTACT_ID</name> @@ -231,11 +231,6 @@ <entityConsumer> <name>Documents</name> <selectionMode>MULTI</selectionMode> - <dependency> - <name>dependency</name> - <entityName>Document_entity</entityName> - <fieldName>Documents</fieldName> - </dependency> <children> <entityParameter> <name>AssignmentRowId_param</name> @@ -246,15 +241,15 @@ <valueProcess>%aditoprj%/entity/Product_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>MainDocuments</name> - <stateProcess>%aditoprj%/entity/Product_entity/entityfields/maindocuments/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Document_entity</entityName> - <fieldName>MainDocuments</fieldName> + <fieldName>Documents</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>MainDocuments</name> + <stateProcess>%aditoprj%/entity/Product_entity/entityfields/maindocuments/stateProcess.js</stateProcess> <children> <entityParameter> <name>AssignmentRowId_param</name> @@ -265,14 +260,14 @@ <valueProcess>%aditoprj%/entity/Product_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>KeywordProductGroupcodes</name> <dependency> <name>dependency</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> + <entityName>Document_entity</entityName> + <fieldName>MainDocuments</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>KeywordProductGroupcodes</name> <children> <entityParameter> <name>ContainerName_param</name> @@ -280,14 +275,14 @@ <expose v="false" /> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>KeywordQuantityUnits</name> <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> <fieldName>SpecificContainerKeywords</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>KeywordQuantityUnits</name> <children> <entityParameter> <name>ContainerName_param</name> @@ -295,14 +290,14 @@ <expose v="false" /> </entityParameter> </children> - </entityConsumer> - <entityConsumer> - <name>Activities</name> <dependency> <name>dependency</name> - <entityName>Activity_entity</entityName> - <fieldName>LinkedObjects</fieldName> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> </dependency> + </entityConsumer> + <entityConsumer> + <name>Activities</name> <children> <entityParameter> <name>ObjectId_param</name> @@ -313,6 +308,11 @@ <valueProcess>%aditoprj%/entity/Product_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Activity_entity</entityName> + <fieldName>LinkedObjects</fieldName> + </dependency> </entityConsumer> <entityActionField> <name>newActivity</name> @@ -326,11 +326,6 @@ <name>Attributes</name> <stateProcess>%aditoprj%/entity/Product_entity/entityfields/attributes/stateProcess.js</stateProcess> <onValidation>%aditoprj%/entity/Product_entity/entityfields/attributes/onValidation.js</onValidation> - <dependency> - <name>dependency</name> - <entityName>AttributeRelation_entity</entityName> - <fieldName>AttributeRelations</fieldName> - </dependency> <children> <entityParameter> <name>ObjectRowId_param</name> @@ -343,6 +338,11 @@ <expose v="false" /> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>AttributeRelation_entity</entityName> + <fieldName>AttributeRelations</fieldName> + </dependency> </entityConsumer> <entityParameter> <name>ExcludedProducts_param</name> @@ -351,6 +351,12 @@ </entityParameter> <entityProvider> <name>Products</name> + <children> + <entityParameter> + <name>ExcludedProducts_param</name> + <expose v="true" /> + </entityParameter> + </children> <dependencies> <entityDependency> <name>1b12e8ef-74ba-4294-bd2b-9d4afa80798c</name> @@ -365,12 +371,6 @@ <isConsumer v="false" /> </entityDependency> </dependencies> - <children> - <entityParameter> - <name>ExcludedProducts_param</name> - <expose v="true" /> - </entityParameter> - </children> </entityProvider> <entityActionField> <name>newTask</name> @@ -381,11 +381,6 @@ <entityConsumer> <name>Tasks</name> <stateProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/stateProcess.js</stateProcess> - <dependency> - <name>dependency</name> - <entityName>Task_entity</entityName> - <fieldName>Tasks</fieldName> - </dependency> <children> <entityParameter> <name>RowId_param</name> @@ -396,15 +391,15 @@ <valueProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>Task_entity</entityName> + <fieldName>Tasks</fieldName> + </dependency> </entityConsumer> <entityConsumer> <name>AttributeTree</name> <stateProcess>%aditoprj%/entity/Product_entity/entityfields/attributetree/stateProcess.js</stateProcess> - <dependency> - <name>dependency</name> - <entityName>AttributeRelation_entity</entityName> - <fieldName>TreeProvider</fieldName> - </dependency> <children> <entityParameter> <name>ObjectRowId_param</name> @@ -415,6 +410,11 @@ <valueProcess>%aditoprj%/entity/Product_entity/entityfields/attributetree/children/objecttype_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>AttributeRelation_entity</entityName> + <fieldName>TreeProvider</fieldName> + </dependency> </entityConsumer> <entityField> <name>USER_NEW</name> @@ -438,17 +438,17 @@ </entityField> <entityConsumer> <name>LogHistories</name> - <dependency> - <name>dependency</name> - <entityName>LogHistory_entity</entityName> - <fieldName>LogHistoryProvider</fieldName> - </dependency> <children> <entityParameter> <name>tablenames_param</name> <valueProcess>%aditoprj%/entity/Product_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>LogHistory_entity</entityName> + <fieldName>LogHistoryProvider</fieldName> + </dependency> </entityConsumer> <entityParameter> <name>ProductText_param</name> @@ -456,11 +456,6 @@ </entityParameter> <entityConsumer> <name>DescriptionTranslations</name> - <dependency> - <name>dependency</name> - <entityName>DescriptionTranslation_entity</entityName> - <fieldName>DescriptionTranslations</fieldName> - </dependency> <children> <entityParameter> <name>ObjectRowid_param</name> @@ -471,6 +466,11 @@ <valueProcess>%aditoprj%/entity/Product_entity/entityfields/descriptiontranslations/children/objecttype_param/valueProcess.js</valueProcess> </entityParameter> </children> + <dependency> + <name>dependency</name> + <entityName>DescriptionTranslation_entity</entityName> + <fieldName>DescriptionTranslations</fieldName> + </dependency> </entityConsumer> <entityActionField> <name>openAdminView</name> @@ -497,6 +497,24 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityConsumer> + <name>KnowledgeManagements</name> + <children> + <entityParameter> + <name>ObjectRowId_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/knowledgemanagements/children/objectrowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/knowledgemanagements/children/objecttype_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + <dependency> + <name>dependency</name> + <entityName>KnowledgeManagement_entity</entityName> + <fieldName>Provider</fieldName> + </dependency> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Product_entity/entityfields/knowledgemanagements/children/objectrowid_param/valueProcess.js b/entity/Product_entity/entityfields/knowledgemanagements/children/objectrowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..24f19f37786781bff6661183f3fcd8ae8d1efb45 --- /dev/null +++ b/entity/Product_entity/entityfields/knowledgemanagements/children/objectrowid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.PRODUCTID")); \ No newline at end of file diff --git a/entity/Product_entity/entityfields/knowledgemanagements/children/objecttype_param/valueProcess.js b/entity/Product_entity/entityfields/knowledgemanagements/children/objecttype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cc6924394ae950c43386275dda2c8db5d7a9c0ed --- /dev/null +++ b/entity/Product_entity/entityfields/knowledgemanagements/children/objecttype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("Context_lib"); +import("system.result"); + +result.string(ContextUtils.getCurrentContextId()); \ No newline at end of file diff --git a/entity/Product_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Product_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index 2db1e9e36cfa068a562f0c1c253c874eb648f33a..d06b0214dc625cee8ca5f435880df2f5deae3b5c 100644 --- a/entity/Product_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/Product_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("PRODUCT.PRODUCTID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.PRODUCT_OBJECTTYPE"); +var idcolumn = "PRODUCT.PRODUCTID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod index b28ece7b968231503e48f774f9d7a5531da15b59..32ad155d4473c1621475321e718f8af1d08e71be 100644 --- a/entity/Productprice_entity/Productprice_entity.aod +++ b/entity/Productprice_entity/Productprice_entity.aod @@ -25,6 +25,7 @@ <name>CURRENCY</name> <title>Currency</title> <consumer>KeywordCurrencies</consumer> + <groupable v="true" /> <mandatory v="true" /> <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/currency/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Productprice_entity/entityfields/currency/displayValueProcess.js</displayValueProcess> @@ -58,6 +59,7 @@ <name>PRODUCT_ID</name> <title>Product</title> <consumer>Products</consumer> + <groupable v="true" /> <linkedContext>Product</linkedContext> <mandatory v="true" /> <stateProcess>%aditoprj%/entity/Productprice_entity/entityfields/product_id/stateProcess.js</stateProcess> @@ -93,6 +95,7 @@ <contentType>NUMBER</contentType> <outputFormat>#,##0.00</outputFormat> <inputFormat>#,##0.00</inputFormat> + <groupable v="true" /> <mandatory v="true" /> <stateProcess>%aditoprj%/entity/Productprice_entity/entityfields/vat/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/vat/valueProcess.js</valueProcess> @@ -102,7 +105,9 @@ <name>PRICELIST</name> <documentation>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/documentation.adoc</documentation> <title>Price list</title> + <colorProcess>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/colorProcess.js</colorProcess> <consumer>KeywordPricelists</consumer> + <groupable v="true" /> <state>AUTO</state> <stateProcess>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/stateProcess.js</stateProcess> <titleProcess>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/titleProcess.js</titleProcess> @@ -315,10 +320,6 @@ <name>CURRENCY.displayValue</name> <expression>%aditoprj%/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/currency.displayvalue/expression.js</expression> </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>PRODUCT_ID.displayValue</name> - <expression>%aditoprj%/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js</expression> - </dbRecordFieldMapping> <dbRecordFieldMapping> <name>FROMQUANTITY.displayValue</name> <expression>%aditoprj%/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/fromquantity.displayvalue/expression.js</expression> diff --git a/entity/Productprice_entity/entityfields/image/valueProcess.js b/entity/Productprice_entity/entityfields/image/valueProcess.js index 8ba121f73f08d59b6efda0fbaa02d9761e31b5b3..adbcde4fe369ba6683fcfb308ffbb6ae8c74639c 100644 --- a/entity/Productprice_entity/entityfields/image/valueProcess.js +++ b/entity/Productprice_entity/entityfields/image/valueProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("system.result"); -result.string("TEXT:" + vars.getString("$field.PRICELIST.displayValue")); \ No newline at end of file +result.string("TEXT:" + vars.getString("$field.PRODUCT_ID.displayValue")); \ No newline at end of file diff --git a/entity/Productprice_entity/entityfields/pricelist/colorProcess.js b/entity/Productprice_entity/entityfields/pricelist/colorProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..df4926b10119acd76184d30eb15a8ea1dc63d4d3 --- /dev/null +++ b/entity/Productprice_entity/entityfields/pricelist/colorProcess.js @@ -0,0 +1,25 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.neon"); + +let color; + +switch (vars.get("$field.PRICELIST")) +{ + case $KeywordRegistry.productPricelist$keyList(): + color = neon.PRIORITY_LOW_COLOR; + break; + case $KeywordRegistry.productPricelist$specialList(): + color = neon.PRIORITY_HIGH_COLOR; + break; + case $KeywordRegistry.productPricelist$serviceList(): + color = neon.PRIORITY_NONE_COLOR + break; + case $KeywordRegistry.productPricelist$standardList(): + default: + color = neon.BRAND_COLOR; + break; +} + +result.string(color); \ No newline at end of file diff --git a/entity/Productprice_entity/recordcontainers/db/filterextensions/favoritefilter/filterConditionProcess.js b/entity/Productprice_entity/recordcontainers/db/filterextensions/favoritefilter/filterConditionProcess.js index c657ebe1ac71578a6aa535aa58f3c953ae76ceeb..2b8c460855ed332f311597ff9151edecd5835c4e 100644 --- a/entity/Productprice_entity/recordcontainers/db/filterextensions/favoritefilter/filterConditionProcess.js +++ b/entity/Productprice_entity/recordcontainers/db/filterextensions/favoritefilter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("PRODUCTPRICE.PRODUCTPRICEID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.PRODUCTPRICE_OBJECTTYPE"); +var idcolumn = "PRODUCTPRICE.PRODUCTPRICEID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js b/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js deleted file mode 100644 index d43ca1490d74c4fc1baa5dd375e5c77f6a2b61fd..0000000000000000000000000000000000000000 --- a/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.result"); - -result.string("select PRODUCT.PRODUCTNAME from PRODUCT where PRODUCT.PRODUCTID = PRODUCTPRICE.PRODUCT_ID"); \ No newline at end of file diff --git a/entity/Role_entity/Role_entity.aod b/entity/Role_entity/Role_entity.aod index c7b403339e19644b50305f467aaf0175e4065e52..55e062d3da7d3020b2666d9341f8ff0321b90e05 100644 --- a/entity/Role_entity/Role_entity.aod +++ b/entity/Role_entity/Role_entity.aod @@ -46,12 +46,6 @@ <entityName>PermissionDetail_entity</entityName> <fieldName>Permissions</fieldName> </dependency> - <children> - <entityParameter> - <name>RoleName_param</name> - <valueProcess>%aditoprj%/entity/Role_entity/entityfields/theirpermissions/children/roletitle_param/valueProcess.js</valueProcess> - </entityParameter> - </children> </entityConsumer> <entityConsumer> <name>PermissionOverviews</name> @@ -60,12 +54,6 @@ <entityName>PermissionOverview_entity</entityName> <fieldName>PermissionOverviews</fieldName> </dependency> - <children> - <entityParameter> - <name>RoleName_param</name> - <valueProcess>%aditoprj%/entity/Role_entity/entityfields/permissionoverviews/children/roletitle_param/valueProcess.js</valueProcess> - </entityParameter> - </children> </entityConsumer> <entityProvider> <name>Roles</name> diff --git a/entity/SalesprojectAnalyses_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectAnalyses_entity/recordcontainers/jdito/contentProcess.js index eee423852dcd66baeefb18745cc79f82ad09109e..7905f1295088e933708ad63f22994da836438987 100644 --- a/entity/SalesprojectAnalyses_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/SalesprojectAnalyses_entity/recordcontainers/jdito/contentProcess.js @@ -14,7 +14,7 @@ import("KeywordRegistry_basic"); var phases = newSelect("KEYID, AB_KEYWORD_ENTRY.TITLE, count(PHASE), AB_KEYWORD_ENTRY.SORTING") .from("SALESPROJECT") .join("AB_KEYWORD_ENTRY", newWhere("KEYID = PHASE") - .and("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase()) + .and("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase())) .and("SORTING != 7")) .groupBy("KEYID, AB_KEYWORD_ENTRY.TITLE, AB_KEYWORD_ENTRY.SORTING") .orderBy("SORTING") diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js index 32a839f38d92337f1f7acd8cf64fc5ba961cd529..d4d779b0c5261b8ad759fec03c049e544903aac1 100644 --- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js @@ -13,8 +13,7 @@ var phasenManager = new SalesprojectConversionRate(); var sql = new SqlBuilder() .from("AB_KEYWORD_ENTRY") -.where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase()) -.and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.salesprojectPhase$nego(), SqlBuilder.NOT_EQUAL()); +.where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase())); if (filter != null) { diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js index f30b4775d6c3f4356b76028e7faa2a488a3a2d66..9d19863bd9c26153fd71bfb7d5b648dee630245b 100644 --- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js +++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js @@ -13,8 +13,7 @@ var phasenManager = new SalesprojectConversionRate(); var sql = new SqlBuilder() .from("AB_KEYWORD_ENTRY") -.where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase()) -.and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.salesprojectPhase$nego(), SqlBuilder.NOT_EQUAL()); +.where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase())); if (filter != null) { diff --git a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..29cb770c0a049830e8884a6a41d1dcd3c5e5290b --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>SalesprojectPhaseDefinition_entity</name> + <title>Salesproject phases</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:LIST_UL</icon> + <siblings /> + <iconIdProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/iconIdProcess.js</iconIdProcess> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>SALESPROJECTPHASETRAITDEFINITIONID</name> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>PHASE</name> + <title>Phase</title> + <mandatory v="true" /> + <dropDownProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/dropDownProcess.js</dropDownProcess> + <displayValueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/displayValueProcess.js</displayValueProcess> + <onValidation>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/onValidation.js</onValidation> + </entityField> + <entityParameter> + <name>SalesprojectUid_param</name> + <expose v="false" /> + </entityParameter> + <entityParameter> + <name>SalesprojectPhaseId_param</name> + <expose v="true" /> + </entityParameter> + <entityProvider> + <name>SalesprojectPhaseDefinitions</name> + <lookupIdfield>SALESPROJECTPHASETRAITDEFINITIONID</lookupIdfield> + <dependencies> + <entityDependency> + <name>1d8760d0-186d-411d-a84e-dc82556ad722</name> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityFieldGroup> + <name>SalesprojectPhaseFullname</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js</valueProcess> + <fields> + <element>PHASE</element> + </fields> + </entityFieldGroup> + <entityConsumer> + <name>ChecklistEntries</name> + <dependency> + <name>dependency</name> + <entityName>ChecklistEntry_entity</entityName> + <fieldName>ChecklistEntries</fieldName> + </dependency> + <children> + <entityParameter> + <name>ChecklistUid_param</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/checklistentries/children/checklistuid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>CHECKLIST_ID</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/checklist_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>traitCount</name> + <title>Traits</title> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/traitcount/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + <contentType>LONG_TEXT</contentType> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <onDBInsert>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/onDBInsert.js</onDBInsert> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CHECKLIST_ID.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.CHECKLIST_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DESCRIPTION.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.DESCRIPTION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PHASE.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.PHASE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PHASE.displayValue</name> + <recordfield>SALESPROJECTPHASEDEFINITION.PHASE</recordfield> + <expression>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/recordfieldmappings/phase.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SALESPROJECTPHASETRAITDEFINITIONID.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.SALESPROJECTPHASEDEFINITIONID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.USER_NEW</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>6b48c807-5948-41ff-a5b5-b1556db01c3e</name> + <tableName>SALESPROJECTPHASEDEFINITION</tableName> + <primaryKey>SALESPROJECTPHASEDEFINITIONID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/checklist_id/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/checklist_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4d1a3077043fd3b0444e1f1a87839cc1d5844519 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/checklist_id/valueProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.result"); +import("system.util"); + + +if (!vars.get("$field.CHECKLIST_ID")) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/checklistentries/children/checklistuid_param/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/checklistentries/children/checklistuid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..91d7fc39bc8d5ad5a55eb72f53dff893886aac9e --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/checklistentries/children/checklistuid_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + + +result.string(vars.get("$field.CHECKLIST_ID")); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/date_edit/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4b3fffc0c63f47083ae49e08b9b746227c628443 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + + +var currentDate = null; + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + currentUser = vars.get("$sys.date"); +} + +result.string(currentDate); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/date_new/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b4e0581883113b47c4aa2ecf96fcb2258bf87768 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + + +var currentDate = null; + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + currentUser = vars.get("$sys.date"); +} + +result.string(currentDate); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/displayValueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..909b87ff774205c98165542547d1286c455092f8 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.salesprojectPhase(), vars.get("$field.PHASE"))); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/dropDownProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..268d3b2dc5db832a404d50b25a958a9e216b8d27 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/dropDownProcess.js @@ -0,0 +1,27 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("Sql_lib"); + + +var salesprojectPhases = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase()); +var dropDownEntries = []; +var counter = 0; + +var exisitingPhases = newSelect("PHASE") + .from("SALESPROJECTPHASEDEFINITION") + .arrayColumn(); + +salesprojectPhases.forEach(function(pSalesprojectPhase){ + + var isExistent = exisitingPhases.includes(pSalesprojectPhase[0]); + + if (!isExistent || (vars.get("$field.PHASE") == pSalesprojectPhase[0])) { + dropDownEntries[counter] = [pSalesprojectPhase[0], pSalesprojectPhase[1]]; + } + + counter++; +}); + +result.object(dropDownEntries); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/onValidation.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..61a58a68724cade1ca65ed289ed9a56594c2ab5c --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/phase/onValidation.js @@ -0,0 +1,24 @@ +import("system.vars"); +import("system.result"); +import("system.translate"); +import("system.neon"); +import("Sql_lib"); + + +var thisValue = vars.get("$this.value"); + +if(thisValue != null && thisValue != "" && + vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && + thisValue != vars.get("$field.PHASE")) +{ + var isExistent = newSelect("COUNT(*)") + .from("SALESPROJECTPHASEDEFINITION") + .where("SALESPROJECTPHASEDEFINITION.SALESPROJECTPHASE", localValue) + .cell(); + + if (isExistent > 0) + { + result.string(translate.text("For this salesproject phase are already traits defined.")); + } +} + diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..75192dbbe5da1c412c31fb25d1849b2b6572b455 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js @@ -0,0 +1,36 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +var salesprojectPhase = vars.get("$field.PHASE"); +var longForm = ""; + +switch(salesprojectPhase){ + case $KeywordRegistry.salesprojectPhase$mal(): + longForm = "Marketing Accepted Lead"; + break; + case $KeywordRegistry.salesprojectPhase$mql(): + longForm = "Marketing Qualified Lead"; + break; + case $KeywordRegistry.salesprojectPhase$nego(): + longForm = "Negotiation"; + break; + case $KeywordRegistry.salesprojectPhase$nqc(): + longForm = "Non Qualified Contact"; + break; + case $KeywordRegistry.salesprojectPhase$offer(): + longForm = "Offer"; + break; + case $KeywordRegistry.salesprojectPhase$sal(): + longForm = "Sales Accepted Lead"; + break; + case $KeywordRegistry.salesprojectPhase$sqo(): + longForm = "Sales Qualified Offer"; + break; + case $KeywordRegistry.salesprojectPhase$mqc(): + longForm = "Marketing Qualified Contact"; + break; +} + +result.string(longForm); diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/traitcount/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/traitcount/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b2430c974f84383660f14bef9d6b4a6d943eae10 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/traitcount/valueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); +import("Sql_lib"); + + +var traitCounting = newSelect("COUNT(*)") + .from("CHECKLISTENTRY") + .where("CHECKLISTENTRY.CHECKLIST_ID", vars.get("$field.CHECKLIST_ID")) + .cell(); + +result.string(traitCounting); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/user_edit/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a55cb327464d6def9b94735913c25ffb5e4328ef --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + + +var currentUser = null; + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + currentUser = vars.get("$sys.user"); +} + +result.string(currentUser); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/user_new/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1411b9ac93e217a76a876371a2609ff9464f4997 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + + +var currentUser = null; + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + currentUser = vars.get("$sys.user"); +} + +result.string(currentUser); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/iconIdProcess.js b/entity/SalesprojectPhaseDefinition_entity/iconIdProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b647759848390c03032e49219e04c68b5f8cf93f --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/iconIdProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string("TEXT:" + vars.getString("$field.PHASE").substr(vars.getString("$field.PHASE").indexOf("PHASE",0)+5, vars.getString("$field.PHASE").length).trim()); \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/onDBInsert.js b/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..c2501480abe5308c33ececdd86eb5f91ab7c59ed --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/onDBInsert.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.entities"); + +var rowData = vars.get("$local.rowdata"); +var creatingConf = entities.createConfigForAddingRows() + .entity("Checklist_entity") + .fieldValues({ + "CHECKLISTID" : rowData["SALESPROJECTPHASEDEFINITION.CHECKLIST_ID"], + "USER_NEW" : vars.get("$sys.user"), + "DATE_NEW" : vars.get("$sys.date") + }); +entities.createRow(creatingConf); diff --git a/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/recordfieldmappings/phase.displayvalue/expression.js b/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/recordfieldmappings/phase.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..c566f14a5d945b383ff38cbe41f3b3dc01cb1c9f --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/recordcontainers/db/recordfieldmappings/phase.displayvalue/expression.js @@ -0,0 +1,9 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); +import("Sql_lib"); + +var resolvingSql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.salesprojectPhase(), "SALESPROJECTPHASEDEFINITION.SALESPROJECTPHASE"); +//var sql = "case when SALESPROJECT_PHASE = '" + $KeywordRegistry.salesprojectPhase$offer() + "' THEN 'Offer' ELSE (" + resolvingSql.toString() + ") end"; + +result.string(resolvingSql); diff --git a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod index 93b68c42d5d79eb27e63bdb535179ddd456eba04..8bbdd874ccb3a760aa05be55f8269b54a6215e9c 100644 --- a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod +++ b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod @@ -52,6 +52,14 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityParameter> + <name>DisabledPhases_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>SalesprojectUid_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js index a961d29c0531224c6213dc70ecd0eb509faa3e23..c66d85815d3f52def5b26491e9e6ccaff853f137 100644 --- a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js @@ -1,12 +1,16 @@ -import("Sql_lib"); import("system.db"); -import("Keyword_lib"); -import("KeywordRegistry_basic"); import("system.result"); import("system.vars"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("Sql_lib"); +import("Util_lib"); -var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase()); + +var res = []; var ids = vars.get("$local.idvalues"); +var disabledPhases = JSON.parse(vars.get("$param.DisabledPhases_param")) || []; +var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase()); var selected = vars.exists("$param.CurrentPhase_param") && vars.get("$param.CurrentPhase_param"); // filter only for steps reqested by the system @@ -23,14 +27,18 @@ if (ids) }) } -var res = []; steps.forEach(function ([stepId, title]) { - if (ids) - res.push([stepId, ids.indexOf(stepId) > -1 ? "ACTIVE" : "EDITABLE", title, _getIcon(stepId)]); - else - res.push([stepId, stepId === selected ? "ACTIVE" : "EDITABLE", title, _getIcon(stepId)]); + var stepState = "DISABLED"; + if (stepId === selected) + stepState = "ACTIVE"; + else if (!disabledPhases.includes(stepId)) + stepState = "EDITABLE"; + + var resStep = [stepId, stepState, title, _getIcon(stepId)]; + res.push(resStep); }); + result.object(res); function _getIcon (pPhase) diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index b412e2dbdef690fe3eea55ef10f70106c9ec0a86..bcfcc3b972f3bdd1ccc586d49c2ed66fbad84d63 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -21,27 +21,6 @@ <titlePlural>Salesprojects</titlePlural> <recordContainer>db</recordContainer> <entityFields> - <entityActionGroup> - <name>observeActionGroup</name> - <children> - <entityActionField> - <name>observe</name> - <title>Observe</title> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/observe/onActionProcess.js</onActionProcess> - <isObjectAction v="true" /> - <iconId>VAADIN:EYE</iconId> - <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/observe/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/observe/titleProcess.js</titleProcess> - </entityActionField> - <entityActionField> - <name>cancelObservation</name> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> - <iconId>VAADIN:EYE_SLASH</iconId> - <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/cancelobservation/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/cancelobservation/titleProcess.js</titleProcess> - </entityActionField> - </children> - </entityActionGroup> <entityProvider> <name>#PROVIDER</name> <dependencies> @@ -81,7 +60,6 @@ <groupable v="false" /> <mandatory v="true" /> <state>EDITABLE</state> - <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phase/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phase/displayValueProcess.js</displayValueProcess> </entityField> <entityField> @@ -124,8 +102,7 @@ <outputFormat>dd.MM.yyyy</outputFormat> <inputFormat>dd.MM.yyyy</inputFormat> <groupable v="true" /> - <mandatory v="true" /> - <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/startdate/valueProcess.js</valueProcess> + <mandatory v="false" /> </entityField> <entityField> <name>STATUS</name> @@ -279,6 +256,7 @@ </entityConsumer> <entityConsumer> <name>Members</name> + <refreshParent v="true" /> <dependency> <name>dependency</name> <entityName>Member_entity</entityName> @@ -309,14 +287,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>newOffer</name> - <documentation>%aditoprj%/entity/Salesproject_entity/entityfields/newoffer/documentation.adoc</documentation> - <title>New offer</title> - <description>Opens the Offer context in NEW-Mode and fills salesproject and contact.</description> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newoffer/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CART</iconId> - </entityActionField> <entityConsumer> <name>Timetrackings</name> <refreshParent v="true" /> @@ -397,13 +367,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>newTimetracking</name> - <title>New time tracking</title> - <description>Opens the time tracking context in new-mode for the selected salesproject</description> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newtimetracking/onActionProcess.js</onActionProcess> - <iconId>VAADIN:STOPWATCH</iconId> - </entityActionField> <entityConsumer> <name>KeywordProbabilties</name> <dependency> @@ -435,14 +398,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>newActivity</name> - <title>New activity</title> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newactivity/onActionProcess.js</onActionProcess> - <iconId>VAADIN:HOURGLASS_END</iconId> - <tooltip>New activity</tooltip> - <tooltipProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess> - </entityActionField> <entityField> <name>InactiveTime</name> <title>Days inactive</title> @@ -510,14 +465,12 @@ <name>PresetTitle_param</name> <expose v="false" /> </entityParameter> + <entityParameter> + <name>PhaseRequirementsFulfilled_parm</name> + <expose v="false" /> + </entityParameter> </children> </entityProvider> - <entityActionField> - <name>newTask</name> - <title>New task</title> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newtask/onActionProcess.js</onActionProcess> - <iconId>VAADIN:TASKS</iconId> - </entityActionField> <entityConsumer> <name>Tasks</name> <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/tasks/stateProcess.js</stateProcess> @@ -560,6 +513,10 @@ <name>PresetTitle_param</name> <expose v="false" /> </entityParameter> + <entityParameter> + <name>PhaseRequirementsFulfilled_parm</name> + <expose v="false" /> + </entityParameter> </children> </entityProvider> <entityParameter> @@ -705,6 +662,14 @@ <name>CurrentPhase_param</name> <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/currentphase_param/valueProcess.js</valueProcess> </entityParameter> + <entityParameter> + <name>SalesprojectUid_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/salesprojectuid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>DisabledPhases_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/disabledphases_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityField> @@ -713,13 +678,6 @@ <contentType>HTML</contentType> <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phaseinfo/valueProcess.js</valueProcess> </entityField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityField> <name>PROJECTTYPE</name> <title>Project type</title> @@ -734,9 +692,6 @@ <fieldName>SpecificAttribute</fieldName> </dependency> <children> - <entityParameter> - <name>ObjectType_param</name> - </entityParameter> <entityParameter> <name>ParentId_param</name> <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/projecttypeattribute/children/parentid_param/valueProcess.js</valueProcess> @@ -753,18 +708,17 @@ <isConsumer v="false" /> </entityDependency> </dependencies> + <children> + <entityParameter> + <name>PhaseRequirementsFulfilled_parm</name> + <expose v="false" /> + </entityParameter> + </children> </entityProvider> <entityParameter> <name>PresetTitle_param</name> <expose v="true" /> </entityParameter> - <entityActionField> - <name>startWorkflow</name> - <title>Start workflow</title> - <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> - <iconId>VAADIN:PLAY</iconId> - <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/startworkflow/stateProcess.js</stateProcess> - </entityActionField> <entityField> <name>PROBABILITY_AI</name> <title>Probability AI</title> @@ -805,10 +759,118 @@ </entityField> <entityField> <name>DATE_NEW</name> + <title>Created on</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/date_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>ACTIVE</name> </entityField> + <entityConsumer> + <name>ChecklistEntryValues</name> + <dependency> + <name>dependency</name> + <entityName>ChecklistEntryValue_entity</entityName> + <fieldName>ChecklistEntryValues</fieldName> + </dependency> + <children> + <entityParameter> + <name>ObjectRowId_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/checklistentryvalues/children/objectrowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ChecklistId_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/checklistentryvalues/children/checklistid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>PhaseDisabledUids_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phasedisableduids_param/valueProcess.js</valueProcess> + <documentation>%aditoprj%/entity/Salesproject_entity/entityfields/phasedisableduids_param/documentation.adoc</documentation> + </entityParameter> + <entityParameter> + <name>PhaseRequirementsFulfilled_parm</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/valueProcess.js</valueProcess> + <expose v="true" /> + <documentation>%aditoprj%/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/documentation.adoc</documentation> + <title></title> + </entityParameter> + <entityProvider> + <name>NoPhaseRequirementLoading</name> + <children> + <entityParameter> + <name>PhaseRequirementsFulfilled_parm</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/nophaserequirementloading/children/phaserequirementsfulfilled_parm/valueProcess.js</valueProcess> + <expose v="false" /> + </entityParameter> + </children> + </entityProvider> + <entityActionGroup> + <name>observeActionGroup</name> + <children> + <entityActionField> + <name>observe</name> + <title>Observe</title> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/observe/onActionProcess.js</onActionProcess> + <isObjectAction v="true" /> + <iconId>VAADIN:EYE</iconId> + <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/observe/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/observe/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>cancelObservation</name> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/cancelobservation/onActionProcess.js</onActionProcess> + <iconId>VAADIN:EYE_SLASH</iconId> + <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/cancelobservation/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Salesproject_entity/entityfields/observeactiongroup/children/cancelobservation/titleProcess.js</titleProcess> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>newOffer</name> + <documentation>%aditoprj%/entity/Salesproject_entity/entityfields/newoffer/documentation.adoc</documentation> + <title>New offer</title> + <description>Opens the Offer context in NEW-Mode and fills salesproject and contact.</description> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newoffer/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CART</iconId> + </entityActionField> + <entityActionField> + <name>newTimetracking</name> + <title>New time tracking</title> + <description>Opens the time tracking context in new-mode for the selected salesproject</description> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newtimetracking/onActionProcess.js</onActionProcess> + <iconId>VAADIN:STOPWATCH</iconId> + </entityActionField> + <entityActionField> + <name>newActivity</name> + <title>New activity</title> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newactivity/onActionProcess.js</onActionProcess> + <iconId>VAADIN:HOURGLASS_END</iconId> + <tooltip>New activity</tooltip> + <tooltipProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>newTask</name> + <title>New task</title> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newtask/onActionProcess.js</onActionProcess> + <iconId>VAADIN:TASKS</iconId> + </entityActionField> + <entityActionField> + <name>startWorkflow</name> + <title>Start workflow</title> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PLAY</iconId> + <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/startworkflow/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> @@ -940,7 +1002,8 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_NEW.value</name> - <recordfield>SALESPROJECT.STARTDATE</recordfield> + <recordfield>SALESPROJECT.DATE_NEW</recordfield> + <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>ACTIVE.value</name> diff --git a/entity/Salesproject_entity/entityfields/checklistentryvalues/children/checklistid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/checklistentryvalues/children/checklistid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7d139bbd2167e2965f317440302f3484f608b65e --- /dev/null +++ b/entity/Salesproject_entity/entityfields/checklistentryvalues/children/checklistid_param/valueProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("Sql_lib"); + + +var checklistId = newSelect("CHECKLIST_ID") + .from("SALESPROJECTPHASEDEFINITION") + .where("SALESPROJECTPHASEDEFINITION.PHASE", vars.get("$field.PHASE")) + .cell(); + +result.string(checklistId); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/checklistentryvalues/children/objectrowid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/checklistentryvalues/children/objectrowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..35c86fce60207e00936f99096038f1ee1f4519e9 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/checklistentryvalues/children/objectrowid_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + + +result.string(vars.get("$field.SALESPROJECTID")); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/date_new/valueProcess.js b/entity/Salesproject_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0c68e0b1ce5d1bcb6519f306dfa01de18c10be7c --- /dev/null +++ b/entity/Salesproject_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} + \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/nophaserequirementloading/children/phaserequirementsfulfilled_parm/valueProcess.js b/entity/Salesproject_entity/entityfields/nophaserequirementloading/children/phaserequirementsfulfilled_parm/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..aa48a92d7c004d71e1191445a5c1f6766c8b7a37 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/nophaserequirementloading/children/phaserequirementsfulfilled_parm/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); + +//overwrite the value in the providers parameter so that the default parameter value will not be calculated +result.string(false); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/phase/valueProcess.js b/entity/Salesproject_entity/entityfields/phase/valueProcess.js deleted file mode 100644 index 7ff3aa7c6b2ad21f43934b9e4ff5131980b35005..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/entityfields/phase/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("KeywordRegistry_basic"); -import("system.neon"); -import("system.vars"); -import("system.result"); - -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) - result.string($KeywordRegistry.salesprojectPhase$nqc()); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/phasedisableduids_param/documentation.adoc b/entity/Salesproject_entity/entityfields/phasedisableduids_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..50c7caa62a1b01ac720b798474a4309a556a5cd8 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/phasedisableduids_param/documentation.adoc @@ -0,0 +1,5 @@ +Contains a stingified array of all IDs of the phases that are gonna be disabled by the stepper component. +There are two reasons why a single step (phase) is disabled: + +. Only the next step to current selected step is available +. The next step is not available when all pre conditions (the checklist items) are no fulfilled \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/phasedisableduids_param/valueProcess.js b/entity/Salesproject_entity/entityfields/phasedisableduids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f6c858840ee253227282c53265a3474d5a9044fb --- /dev/null +++ b/entity/Salesproject_entity/entityfields/phasedisableduids_param/valueProcess.js @@ -0,0 +1,28 @@ +import("Keyword_lib"); +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("Util_lib"); + +var currentPhase = vars.get("$field.PHASE"); +var allPhasesInOrder = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase()).map(function (row){ + return row[0]; +}); + +var res = JSON.stringify(_getDisabledPhases(currentPhase)); +result.string(res); + +function _getDisabledPhases(pPhase) +{ + var phases = []; + var startIdx = allPhasesInOrder.indexOf(pPhase) + 1;//+1 to skip "ourself" + var requirementsForNextPhaseFulfilled = Utils.toBoolean(vars.get("$param.PhaseRequirementsFulfilled_parm")); + if (requirementsForNextPhaseFulfilled) + startIdx++;//skip the next phase to be able switch to the next phase + for (var i = startIdx; i < allPhasesInOrder.length; i++) + { + phases.push(allPhasesInOrder[i]); + } + + return phases; +} \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/documentation.adoc b/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..1650b2a2441f3b1d421ef2f1b7cc23ed245867ac --- /dev/null +++ b/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/documentation.adoc @@ -0,0 +1,2 @@ +This param determines if all precondition have been fulfilled of the current phases checklist or not. +Returns a boolean. \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/valueProcess.js b/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d1da1efd8bcd5651e9609f671aca9ad902d1871c --- /dev/null +++ b/entity/Salesproject_entity/entityfields/phaserequirementsfulfilled_parm/valueProcess.js @@ -0,0 +1,33 @@ +import("system.vars"); +import("system.result"); +import("system.entities"); +import("KeywordRegistry_basic"); +import("Sql_lib"); + +var currentPhase = vars.get("$field.PHASE"); + +result.string(_requirementsFulfilled(currentPhase)); + +function _requirementsFulfilled(pPhase) +{ + var fulFilled = true; + var checklistId = newSelect("CHECKLIST_ID") + .from("SALESPROJECTPHASEDEFINITION") + .where("SALESPROJECTPHASEDEFINITION.PHASE", pPhase) + .cell(); + var salesprojectId = vars.get("$field.SALESPROJECTID"); + var loadingConf = entities.createConfigForLoadingRows() + .entity("ChecklistEntryValue_entity") + .fields(["IS_FULFILLED"]) + .provider("ChecklistEntryValues") + .addParameter("ChecklistId_param", checklistId) + .addParameter("ObjectRowId_param", salesprojectId); + + var rows = entities.getRows(loadingConf); + + rows.some(function(pRow){ + if (pRow["IS_FULFILLED"] == 0) fulFilled = false; + }); + + return fulFilled; +} \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/currentphase_param/valueProcess.js b/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/currentphase_param/valueProcess.js index 7d27814e727ef51078645ba0c65fa52b22dc4a3d..5c51a518dd93510c15eeb34fefb2b348853b5fd0 100644 --- a/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/currentphase_param/valueProcess.js +++ b/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/currentphase_param/valueProcess.js @@ -1,4 +1,5 @@ -import("system.vars"); import("system.result"); +import("system.vars"); + result.string(vars.get("$field.PHASE")); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/disabledphases_param/valueProcess.js b/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/disabledphases_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bc33444f52e2367d42bf3b55176855a684b69dc1 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/disabledphases_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.PhaseDisabledUids_param")); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/salesprojectuid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/salesprojectuid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..35c86fce60207e00936f99096038f1ee1f4519e9 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/salesprojectuid_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + + +result.string(vars.get("$field.SALESPROJECTID")); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index bf9199d48642536122035a91a371f8193e23271c..157e471a8f17a97b96a9efe7098a4b2e12448118 100644 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("SALESPROJECT.SALESPROJECTID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.SALESPROJECT_OBJECTTYPE"); +var idcolumn = "SALESPROJECT.SALESPROJECTID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js index 308e821efaad27ef7cc947f8fcd0710229304998..eb4293c44f98b55df38ff494a122f8cef7077ab5 100644 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js @@ -9,7 +9,7 @@ var order = vars.get("$local.order"); var sqlHelper = new SqlMaskingUtils(); var groupedList = "SALESPROJECT.PHASE" var condition = vars.get("$local.condition"); -var stmt = new SqlBuilder().from("SALESPROJECT").join("AB_KEYWORD_ENTRY", newWhere("AB_KEYWORD_ENTRY.KEYID = SALESPROJECT.PHASE").and("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase())).groupBy(groupedList + ", AB_KEYWORD_ENTRY.SORTING, AB_KEYWORD_ENTRY.KEYID"); +var stmt = new SqlBuilder().from("SALESPROJECT").join("AB_KEYWORD_ENTRY", newWhere("AB_KEYWORD_ENTRY.KEYID = SALESPROJECT.PHASE").and("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase()))).groupBy(groupedList + ", AB_KEYWORD_ENTRY.SORTING, AB_KEYWORD_ENTRY.KEYID"); if (condition != " ") stmt.where(condition); diff --git a/entity/SerialLetter_entity/SerialLetter_entity.aod b/entity/SerialLetter_entity/SerialLetter_entity.aod index 0162e4d6232909de3ec02279274008a632cec774..2e747b5209ad1e75e3d17ce1595d1ee92ff27934 100644 --- a/entity/SerialLetter_entity/SerialLetter_entity.aod +++ b/entity/SerialLetter_entity/SerialLetter_entity.aod @@ -145,28 +145,6 @@ </entityParameter> </children> </entityConsumer> - <entityActionField> - <name>downloadLetter</name> - <title>Download letter</title> - <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js</onActionProcess> - <iconId>VAADIN:DOWNLOAD_ALT</iconId> - <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js</stateProcess> - <tooltip>Download letter</tooltip> - </entityActionField> - <entityActionField> - <name>downloadTemplate</name> - <title>Download template</title> - <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess> - <iconId>VAADIN:FILE_FONT</iconId> - <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityField> <name>generated</name> <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/generated/valueProcess.js</valueProcess> @@ -198,6 +176,25 @@ </entityParameter> </children> </entityConsumer> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityActionField> + <name>downloadLetter</name> + <title>Download letter</title> + <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js</onActionProcess> + <iconId>VAADIN:DOWNLOAD_ALT</iconId> + <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js</stateProcess> + <tooltip>Download letter</tooltip> + </entityActionField> + <entityActionField> + <name>downloadTemplate</name> + <title>Download template</title> + <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess> + <iconId>VAADIN:FILE_FONT</iconId> + <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess> + </entityActionField> <entityActionField> <name>generateLetter</name> <title>Generate letter</title> @@ -205,10 +202,13 @@ <iconId>VAADIN:FILE_PROCESS</iconId> <tooltip>Generate letter</tooltip> </entityActionField> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/SupportTicket_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/SupportTicket_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js index 765e2ce46b47b556bb602c68ad610db83b1195df..a49514ad69abfed288c70f506f3b9dd30bdd53de 100644 --- a/entity/SupportTicket_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js +++ b/entity/SupportTicket_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js @@ -1,11 +1,12 @@ +import("system.vars"); import("Favorites_lib"); import("system.result"); import("Sql_lib"); -var favoFilterCond = newWhere(); -var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup(); +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); -for(i = 0; i < rowIds.length; i++) - favoFilterCond.or("TICKET.TICKETID", rowIds[i], SqlBuilder.EQUAL()); +var objecttype = vars.get("$field.SUPPORTTICKET_OBJECTTYPE"); +var idcolumn = "TICKET.TICKETID"; -result.string(favoFilterCond.toString()); \ No newline at end of file +result.string(FavoritesUtil.getFilterDisplayCondition(objecttype, operator, rawvalue, idcolumn)); diff --git a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod index 5965389eccc5606e7158e56a413b65b8fe3f5d39..c02555601d5382f8af78f3e63e9087f1a2136d75 100644 --- a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod +++ b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod @@ -10,6 +10,7 @@ <entityActionField> <name>drop_action</name> <onActionProcess>%aditoprj%/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js</onActionProcess> + <iconId>NEON:TRASH</iconId> </entityActionField> <entityField> <name>UID</name> diff --git a/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js index 1910f493948e777cbf153d2fc3dcacd413a0666c..a925172feffc026c0060394edb06e49c1957d69c 100644 --- a/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js +++ b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js @@ -69,5 +69,5 @@ if (communicationsToInsert.length > 0) db.inserts(communicationsToInsert); DataPrivacyUtils.notifyNeedDataPrivacyUpdate(); } - -neon.refreshAll();//this is needed for the dashboard: other elements are refreshed and display for example unlinkedMails \ No newline at end of file +// UnlinkedMail_entity is deprecated; This will be deleted. +//neon.refreshAll();//this is needed for the dashboard: other elements are refreshed and display for example unlinkedMails \ No newline at end of file diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod index 754652a4c4b6b58e593f926bdf873cff66a82949..02cf25cfe30338a9c0616acbd4dc9633652a5b57 100644 --- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod +++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod @@ -57,7 +57,6 @@ <element>PROCESS_SETVALUE</element> <element>RECORD</element> </onValueChangeTypes> - <onValidation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entrydate/onValidation.js</onValidation> </entityField> <entityField> <name>END_TIME</name> diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod index 150a4ab576ca8d3da3f3031e07d92070bd33121e..5b3aed5fe7eb132446e7268945dd6ba265eb60c5 100644 --- a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod +++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod @@ -4,7 +4,6 @@ <title>Visit Recommendation</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/VisitRecommendation_entity/documentation.adoc</documentation> - <iconProcess>%aditoprj%/entity/VisitRecommendation_entity/iconProcess.js</iconProcess> <grantCreate v="true" /> <grantUpdateProcess>%aditoprj%/entity/VisitRecommendation_entity/grantUpdateProcess.js</grantUpdateProcess> <grantDeleteProcess>%aditoprj%/entity/VisitRecommendation_entity/grantDeleteProcess.js</grantDeleteProcess> diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod index 36ddaa0af572c19bf19bdb0eb61a2feeb2731e62..17bfa5940323c1306ad8b4a09841f9e3cc53e973 100644 --- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod +++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod @@ -34,26 +34,6 @@ <name>UID</name> <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/uid/valueProcess.js</valueProcess> </entityField> - <entityActionGroup> - <name>tableActions</name> - <children> - <entityActionField> - <name>openModeler</name> - <title>Open modeler</title> - <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openmodeler/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:EXTERNAL_LINK</iconId> - <stateProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openmodeler/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>createModel</name> - <title>Create model</title> - <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/createmodel/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>NEON:PLUS</iconId> - </entityActionField> - </children> - </entityActionGroup> <entityField> <name>CATEGORY</name> <title>Category</title> @@ -110,13 +90,6 @@ <contentType>IMAGE</contentType> <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js</valueProcess> </entityField> - <entityActionField> - <name>openAdminView</name> - <title>Open admin view</title> - <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> - <iconId>VAADIN:CURLY_BRACKETS</iconId> - <stateProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/openadminview/stateProcess.js</stateProcess> - </entityActionField> <entityParameter> <name>ProcessDefinitionKey_param</name> <expose v="true" /> @@ -188,12 +161,6 @@ <name>Context_param</name> <expose v="true" /> </entityParameter> - <entityActionField> - <name>downloadXML</name> - <title>Export workflow</title> - <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/downloadxml/onActionProcess.js</onActionProcess> - <iconId>VAADIN:DOWNLOAD</iconId> - </entityActionField> <entityConsumer> <name>Signals</name> <dependency> @@ -219,13 +186,6 @@ <name>IsWorkflowImport_param</name> <expose v="true" /> </entityParameter> - <entityActionField> - <name>editWorkflow</name> - <title>Edit workflow</title> - <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/editworkflow/onActionProcess.js</onActionProcess> - <iconId>VAADIN:EDIT</iconId> - <tooltip>Edit workflow</tooltip> - </entityActionField> <entityField> <name>WORKFLOWDEFINITION_OBJECTTYPE</name> <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/workflowdefinition_objecttype/valueProcess.js</valueProcess> @@ -248,6 +208,46 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityActionGroup> + <name>tableActions</name> + <children> + <entityActionField> + <name>openModeler</name> + <title>Open modeler</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openmodeler/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:EXTERNAL_LINK</iconId> + <stateProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openmodeler/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>createModel</name> + <title>Create model</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/createmodel/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>NEON:PLUS</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>downloadXML</name> + <title>Export workflow</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/downloadxml/onActionProcess.js</onActionProcess> + <iconId>VAADIN:DOWNLOAD</iconId> + </entityActionField> + <entityActionField> + <name>editWorkflow</name> + <title>Edit workflow</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/editworkflow/onActionProcess.js</onActionProcess> + <iconId>VAADIN:EDIT</iconId> + <tooltip>Edit workflow</tooltip> + </entityActionField> + <entityActionField> + <name>openAdminView</name> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js b/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js index a9231e7044d7ab9e4331809c863662b08f525404..ec59f1adf3910e1a61ea891917b4bd11789be6e4 100644 --- a/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js +++ b/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js @@ -1,7 +1,19 @@ +import("system.logging"); import("system.vars"); import("system.result"); import("system.neon"); import("system.workflow"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$field.VERSION")) - result.string(workflow.getProcessDiagram(vars.get("$field.UID"))); \ No newline at end of file +{ + try + { + var uid = vars.get("$field.UID"); + var diagram = workflow.getProcessDiagram(uid); + result.string(diagram); + } + catch (err) + { + logging.log(err); + } +} \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 293c3a135d93671258e9e25978c8204ac6938ff6..a2533252710e522d04c573380324ad194b229aaa 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -7287,36 +7287,6 @@ <entry> <key>Email address</key> </entry> - <entry> - <key>Created from</key> - </entry> - <entry> - <key>12 Months</key> - </entry> - <entry> - <key>6 Months</key> - </entry> - <entry> - <key>1 Month</key> - </entry> - <entry> - <key>2 Weeks</key> - </entry> - <entry> - <key>Calendar week</key> - </entry> - <entry> - <key>Weekplan already exists!</key> - </entry> - <entry> - <key>Weekplan Info</key> - </entry> - <entry> - <key>requested</key> - </entry> - <entry> - <key>Status Appointment</key> - </entry> <entry> <key>#rememberme</key> </entry> @@ -7614,6 +7584,69 @@ <entry> <key>Verantwortlicher</key> </entry> + <entry> + <key>Marketing Workflow</key> + </entry> + <entry> + <key>Traits</key> + </entry> + <entry> + <key>Salesproject Phase</key> + </entry> + <entry> + <key>Document template</key> + </entry> + <entry> + <key>Kontext</key> + </entry> + <entry> + <key>Checklist</key> + </entry> + <entry> + <key>Trait</key> + </entry> + <entry> + <key>Salesproject phase</key> + </entry> + <entry> + <key>Status: \"won\"</key> + </entry> + <entry> + <key>Project team roles</key> + </entry> + <entry> + <key>Offer sent</key> + </entry> + <entry> + <key>Classification fields</key> + </entry> + <entry> + <key>Project start within next 12 months</key> + </entry> + <entry> + <key>Project team: \"Internal distribution\"</key> + </entry> + <entry> + <key>Probablity: 100%</key> + </entry> + <entry> + <key>Project team: \"Project manager\"</key> + </entry> + <entry> + <key>Offer exists</key> + </entry> + <entry> + <key>Its not allowed to step over some salesproject phases.</key> + </entry> + <entry> + <key>Salesproject phases</key> + </entry> + <entry> + <key>Not all prerequisites are fulfilled.</key> + </entry> + <entry> + <key>To skip a salesproject phase isn't allowed.</key> + </entry> <entry> <key>No Restrictions</key> </entry> @@ -7635,6 +7668,36 @@ <entry> <key>Delete this Function</key> </entry> + <entry> + <key>Automatically</key> + </entry> + <entry> + <key>Checklist entries</key> + </entry> + <entry> + <key>Communication strategy designed</key> + </entry> + <entry> + <key>Probability checked and eventually readjusted</key> + </entry> + <entry> + <key>Contract have been signed</key> + </entry> + <entry> + <key>Communication strategy introduced</key> + </entry> + <entry> + <key>Workshop for project-realization planned</key> + </entry> + <entry> + <key>Risk audit performed</key> + </entry> + <entry> + <key>Appointment for offer-agreement occured</key> + </entry> + <entry> + <key>Follow-up appointment(s) exists (e.g.: for workshops..)</key> + </entry> <entry> <key>Subtotal</key> </entry> @@ -7654,10 +7717,7 @@ <key>The selected Contact doesn't have an address set.</key> </entry> <entry> - <key>Sent offers</key> - </entry> - <entry> - <key>Salesproject phases</key> + <key>Set completed</key> </entry> <entry> <key>without Vat</key> @@ -7888,7 +7948,7 @@ <key>Adviser status</key> </entry> <entry> - <key>Automatically</key> + <key>Checklist entry</key> </entry> <entry> <key>License</key> @@ -7899,6 +7959,123 @@ <entry> <key>Map data © %0 contributors | %1 | %2</key> </entry> + <entry> + <key>Weekplan Info</key> + </entry> + <entry> + <key>12 Months</key> + </entry> + <entry> + <key>add Contact to Sync</key> + </entry> + <entry> + <key>ChecklistEntryValue</key> + </entry> + <entry> + <key>6 Months</key> + </entry> + <entry> + <key>remove Contact from Sync</key> + </entry> + <entry> + <key>1 Month</key> + </entry> + <entry> + <key>add to sync</key> + </entry> + <entry> + <key>Created from</key> + </entry> + <entry> + <key>requested</key> + </entry> + <entry> + <key>remove from sync</key> + </entry> + <entry> + <key>Status Appointment</key> + </entry> + <entry> + <key>add contact to ewssync</key> + </entry> + <entry> + <key>Sync Exchange Contacts</key> + </entry> + <entry> + <key>number of connections</key> + </entry> + <entry> + <key>2 Weeks</key> + </entry> + <entry> + <key>The given Keyword Category Name is already used but needs to be unique</key> + </entry> + <entry> + <key>Keyword Entries</key> + </entry> + <entry> + <key>Keyword Category</key> + </entry> + <entry> + <key>Keyword Categories</key> + </entry> + <entry> + <key>Keyword Entry</key> + </entry> + <entry> + <key>Category Name</key> + </entry> + <entry> + <key>Migrate keyword containers</key> + </entry> + <entry> + <key>Sorting direction</key> + </entry> + <entry> + <key>Sorting by</key> + </entry> + <entry> + <key>refresh classifications</key> + </entry> + <entry> + <key>ascending</key> + </entry> + <entry> + <key>Weekplan already exists!</key> + </entry> + <entry> + <key>descending</key> + </entry> + <entry> + <key>by translated name</key> + </entry> + <entry> + <key>Sent offers</key> + </entry> + <entry> + <key>Calendar week</key> + </entry> + <entry> + <key>by name</key> + </entry> + <entry> + <key>by sorting</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> + </entry> + <entry> + <key>Recalculate Classifications</key> + </entry> + <entry> + <key>Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed.</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> + </entry> + <entry> + <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> <sqlModels> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 1a2053bc5ebc622029c1f388196c786ec265e5bd..fb4bb331d5ae83829c161f730480426473dbb901 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -22,6 +22,34 @@ <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key> <value>Das Bearbeiten von EML-Dateien ist hier nicht möglich. Um den Inhalt zu ändern, können Sie die Vorlage herunterladen, bearbeiten und erneut hochladen.</value> </entry> + <entry> + <key>Checklist entries</key> + <value>Checklisteneinträge</value> + </entry> + <entry> + <key>Project team: \"Project manager\"</key> + <value>Projektteam: \"Projektmanager\"</value> + </entry> + <entry> + <key>Checklist entry</key> + <value>Checklisteneintrag</value> + </entry> + <entry> + <key>descending</key> + <value>absteigend</value> + </entry> + <entry> + <key>Salesproject phases</key> + <value>Vertriebsprojektphasen</value> + </entry> + <entry> + <key>To skip a salesproject phase isn't allowed.</key> + <value>Das Überspringen einer Vertriebsprojektphase ist nicht erlaubt.</value> + </entry> + <entry> + <key>Its not allowed to step over some salesproject phases.</key> + <value>Es ist nicht erlaubt Vertriebsprojektphasen zu überspringen.</value> + </entry> <entry> <key>Probability AI</key> <value>Wahrscheinlichkeit KI</value> @@ -38,6 +66,10 @@ <key>Restore Team</key> <value>Team wiederherstellen</value> </entry> + <entry> + <key>The given Keyword Category Name is already used but needs to be unique</key> + <value>Der angegebene Schlüsselwort Kategoriename existiert bereits, muss aber eindeutig sein</value> + </entry> <entry> <key>Choose Team</key> <value>Team auswählen</value> @@ -494,10 +526,6 @@ <key>Priority</key> <value>Priorität</value> </entry> - <entry> - <key>Salesproject phases</key> - <value>Vertriebsprojektphasen</value> - </entry> <entry> <key>%0 new recipients will be added to the bulk mail.</key> <value>Der Serienmail werden %0 neue Empfänger hinzugefügt.</value> @@ -1277,7 +1305,7 @@ </entry> <entry> <key>VAT</key> - <value>UmsSt.</value> + <value>Ust.</value> </entry> <entry> <key>The expiry date must be after the start date!</key> @@ -1451,6 +1479,10 @@ <key>Maindocuments</key> <value>Hauptdokumente</value> </entry> + <entry> + <key>ascending</key> + <value>aufsteigend</value> + </entry> <entry> <key>Price</key> <value>Preis</value> @@ -1487,6 +1519,10 @@ <key>The product number already exists!</key> <value>Die Produktnummer existiert bereits!</value> </entry> + <entry> + <key>by name</key> + <value>Name</value> + </entry> <entry> <key>Quantity</key> <value>Menge</value> @@ -1523,6 +1559,10 @@ <key>Volume</key> <value>Volumen</value> </entry> + <entry> + <key>by translated name</key> + <value>Name (Übersetzt)</value> + </entry> <entry> <key>Partial order</key> <value>Teilauftrag</value> @@ -1826,6 +1866,10 @@ <key>Show all offers</key> <value>Alle Angebote anzeigen</value> </entry> + <entry> + <key>Project team: \"Internal distribution\"</key> + <value>Projektteam: \"Interner Vertrieb\"</value> + </entry> <entry> <key>Filetype</key> <value>Dateityp</value> @@ -1875,8 +1919,7 @@ <value>Niedrigpreisstrategie</value> </entry> <entry> - <key>Sent offers</key> - <value>Versendete Angebote</value> + <key>Sent Offers</key> </entry> <entry> <key>responsible</key> @@ -2395,6 +2438,10 @@ <key>Outgoing</key> <value>ausgehend</value> </entry> + <entry> + <key>Classification fields</key> + <value>Klassifizierungsfelder</value> + </entry> <entry> <key>Paraguay</key> <value>Paraguay</value> @@ -3307,10 +3354,6 @@ <key>Singapore</key> <value>Singapur</value> </entry> - <entry> - <key>Calendar week</key> - <value>Kalenderwoche</value> - </entry> <entry> <key>French Guiana</key> <value>Französisch-Guayana</value> @@ -4130,7 +4173,7 @@ </entry> <entry> <key>VAT in %</key> - <value>UmsSt. in %</value> + <value>Ust. in %</value> </entry> <entry> <key>Sales manager</key> @@ -5790,10 +5833,6 @@ <key>medium</key> <value>mittel</value> </entry> - <entry> - <key>Site visit</key> - <value>Besuch vor Ort</value> - </entry> <entry> <key>D</key> <value>D</value> @@ -5934,6 +5973,10 @@ <key>Consisted customer</key> <value>Bestandskunde</value> </entry> + <entry> + <key>Project start within next 12 months</key> + <value>Projektstart innerhalb nächster 12 Monate</value> + </entry> <entry> <key>Prospective customer</key> <value>Interessent</value> @@ -5986,6 +6029,10 @@ <key>2 big</key> <value>gross</value> </entry> + <entry> + <key>Probablity: 100%</key> + <value>Wahrscheinlichkeit: 100%</value> + </entry> <entry> <key>Weight (kg)</key> <value>Gewicht (kg)</value> @@ -6908,6 +6955,10 @@ <key>Credit</key> <value>Gutschrift</value> </entry> + <entry> + <key>Status: \"won\"</key> + <value>Status: \"gewonnen\"</value> + </entry> <entry> <key>The replacement name has to be unique.</key> <value>Der Ersatzname muss eindeutig sein</value> @@ -7081,10 +7132,18 @@ <key>Everyone</key> <value>Alle</value> </entry> + <entry> + <key>Offer exists</key> + <value>Angebot existiert</value> + </entry> <entry> <key>Salesproject member Id</key> <value>VertriebsprojektsteilnehmerId</value> </entry> + <entry> + <key>Offer sent</key> + <value>Angebot versendet</value> + </entry> <entry> <key>Edit</key> <value>Editieren</value> @@ -7113,6 +7172,10 @@ <key>To buildingnumber</key> <value>Bis hausnummer</value> </entry> + <entry> + <key>Project team roles</key> + <value>Projektteamrollen</value> + </entry> <entry> <key>Ignore daily series</key> <value>Tägliche Serie ignorieren</value> @@ -7848,6 +7911,10 @@ <key>Try to create activity automatically and ask for more information if necessary</key> <value>Versuche Aktivität automatisch anzulegen und fordert weitere Informationen an wenn nötig</value> </entry> + <entry> + <key>Not all prerequisites are fulfilled.</key> + <value>Es sind leider nicht alle Vorraussetzungen erfüllt.</value> + </entry> <entry> <key>New Appointment</key> <value>Neuer Termin</value> @@ -8175,6 +8242,9 @@ Bitte Datumseingabe prüfen</value> <key>Export CSV \"%0\" can now be downloaded</key> <value>Export CSV \"%0\" kann heruntergeladen werden</value> </entry> + <entry> + <key>Automatically</key> + </entry> <entry> <key>Templatename</key> <value>Vorlagenname</value> @@ -9486,6 +9556,22 @@ Bitte Datumseingabe prüfen</value> <key>Recalculate all Classifications</key> <value>Alle Klassifizierungen neuberechnen</value> </entry> + <entry> + <key>Recalculate Classifications</key> + <value>Klassifizierungen neuberechnen</value> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> + <value>Startet den Serverprozess Manuell. Berechnet alle (potenziell) veralteten Klassifizierungen. Benutze dies nach Änderungen an den Klassifizierungseinstellungen.</value> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> + <value>Startet den Serverprozess Manuell. Berechnet alle Klassifizierungen neu. Benutze dies nur nach z.B dem Importieren von Daten von ausserhalb des Systems bei denen der outdated flag nciht richtig gesetzt wurde, da dieser Durchlauf länger dauen kann</value> + </entry> + <entry> + <key>Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed.</key> + <value>Sind sie sich sicher, dass sie alle Klassifizierungen anhand der konfigurierten Bewertungen neuberechnen willst? Dies kann länger dauern, da ALLE Klassifizierungen neuberechnet werden und wenn nötig geupdated werden.</value> + </entry> <entry> <key>Reminder:</key> <value>Erinnerung:</value> @@ -9719,10 +9805,6 @@ Bitte Datumseingabe prüfen</value> <key>Responsible Department</key> <value>zuständige Abteilung</value> </entry> - <entry> - <key>Weekplan already exists!</key> - <value>Wochenplan existiert bereits!</value> - </entry> <entry> <key>Shows the different conversion rates of the sales project phases</key> <value>zeigt die unterschiedlichen Umrechnungsraten der vertriebsprojektphasen</value> @@ -9750,6 +9832,10 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Seite</key> </entry> + <entry> + <key>by sorting</key> + <value>Manuell</value> + </entry> <entry> <key>from 350 €</key> <value>ab 350€</value> @@ -9880,37 +9966,6 @@ Bitte Datumseingabe prüfen</value> <key>Probability in %</key> <value>Wahrscheinlichkeit in %</value> </entry> - <entry> - <key>Created from</key> - <value>Ersteller</value> - </entry> - <entry> - <key>12 Months</key> - <value>12 Monate</value> - </entry> - <entry> - <key>6 Months</key> - <value>6 Monate</value> - </entry> - <entry> - <key>1 Month</key> - <value>1 Monat</value> - </entry> - <entry> - <key>2 Weeks</key> - <value>2 Wochen</value> - </entry> - <entry> - <key>Weekplan Info</key> - </entry> - <entry> - <key>requested</key> - <value>angefragt</value> - </entry> - <entry> - <key>Status Appointment</key> - <value>Status Termin</value> - </entry> <entry> <key>Standard City</key> <value>Standardstadt</value> @@ -10158,7 +10213,22 @@ Bitte Datumseingabe prüfen</value> <value>Nur ganze Zahlen erlaubt</value> </entry> <entry> - <key>Sent Offers</key> + <key>Salesproject phase</key> + <value>Vertriebsprojektphase</value> + </entry> + <entry> + <key>Kontext</key> + </entry> + <entry> + <key>Trait</key> + <value>Merkmal</value> + </entry> + <entry> + <key>Document template</key> + </entry> + <entry> + <key>Traits</key> + <value>Merkmale</value> </entry> <entry> <key>Salesproject Phases</key> @@ -10376,6 +10446,49 @@ Bitte Datumseingabe prüfen</value> <key>My district assignments to check</key> <value>Meine zu prüfenden Gebietszuweisungen</value> </entry> + <entry> + <key>Checklist</key> + <value>Checkliste</value> + </entry> + <entry> + <key>Salesproject Phase</key> + </entry> + <entry> + <key>Communication strategy designed</key> + <value>Kommunikationsstrategie erarbeitet</value> + </entry> + <entry> + <key>Probability checked and eventually readjusted</key> + <value>Wahrscheinlichkeit überprüfen und ggf. nachjustieren</value> + </entry> + <entry> + <key>Communication strategy introduced</key> + <value>Kommunikationsstrategie wurde vorgestellt</value> + </entry> + <entry> + <key>Follow-up appointment(s) exists (e.g.: for workshops..)</key> + <value>Folgetermin(e) existiert (z.B. für Workshops..)</value> + </entry> + <entry> + <key>Risk audit performed</key> + <value>Risikoaudit durchgeführt</value> + </entry> + <entry> + <key>Workshop for project-realization planned</key> + <value>Workshop für Projektumsetzung geplannt</value> + </entry> + <entry> + <key>Appointment for offer-agreement occured</key> + <value>Termin zur Angebotsabstimmung hat stattgefunden</value> + </entry> + <entry> + <key>Contract have been signed</key> + <value>Vertrag wurde unterschrieben</value> + </entry> + <entry> + <key>Set completed</key> + <value>Erledigt setzen</value> + </entry> <entry> <key>Responsible Districts</key> </entry> @@ -10400,11 +10513,121 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Adviser status</key> </entry> + <entry> + <key>Site visit</key> + </entry> + <entry> + <key>Marketing Workflow</key> + </entry> <entry> <key>INSERT</key> </entry> <entry> - <key>Automatically</key> + <key>Weekplan Info</key> + <value>Wochenplaninformation</value> + </entry> + <entry> + <key>12 Months</key> + <value>12 Monate</value> + </entry> + <entry> + <key>add Contact to Sync</key> + <value>Kontakt zur Synchronisierung hinzufügen</value> + </entry> + <entry> + <key>ChecklistEntryValue</key> + </entry> + <entry> + <key>6 Months</key> + <value>6 Monate</value> + </entry> + <entry> + <key>remove Contact from Sync</key> + <value>Kontakt aus der Synchronisierung entfernen</value> + </entry> + <entry> + <key>1 Month</key> + <value>1 Monat</value> + </entry> + <entry> + <key>add to sync</key> + <value>zur Synchronisierung hinzufügen</value> + </entry> + <entry> + <key>Created from</key> + <value>erstellt von</value> + </entry> + <entry> + <key>requested</key> + <value>angefordert</value> + </entry> + <entry> + <key>remove from sync</key> + <value>aus der Synchronisierung entfernen</value> + </entry> + <entry> + <key>Status Appointment</key> + <value>Status Notification</value> + </entry> + <entry> + <key>add contact to ewssync</key> + <value>Kontakt zu ewssync hinzufügen</value> + </entry> + <entry> + <key>Sync Exchange Contacts</key> + <value>Exchange-Kontakte synchronisieren</value> + </entry> + <entry> + <key>number of connections</key> + <value>Anzahl der Verbindungen</value> + </entry> + <entry> + <key>2 Weeks</key> + <value>2 Wochen</value> + </entry> + <entry> + <key>Keyword Entries</key> + <value>Schlüsselwort-Einträge</value> + </entry> + <entry> + <key>Keyword Categories</key> + <value>Schlüsselwort-Kategorien</value> + </entry> + <entry> + <key>Keyword Category</key> + <value>Schlüsselwort-Kategorie</value> + </entry> + <entry> + <key>Keyword Entry</key> + <value>Schlüsselwort-Eintrag</value> + </entry> + <entry> + <key>Category Name</key> + <value>Kategoriename</value> + </entry> + <entry> + <key>Migrate keyword containers</key> + </entry> + <entry> + <key>Sorting direction</key> + <value>Sortierrichtung</value> + </entry> + <entry> + <key>Sorting by</key> + <value>Sortieren nach</value> + </entry> + <entry> + <key>refresh classifications</key> + <value>Klassifizierungen neuberechnen</value> + </entry> + <entry> + <key>Weekplan already exists!</key> + </entry> + <entry> + <key>Sent offers</key> + </entry> + <entry> + <key>Calendar week</key> </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 3eb5a435ae5701595e63ac37770cdc0e69031156..aab38d453ab679337ca3e7173fb8bbdebccfa89f 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -7968,9 +7968,195 @@ <entry> <key>Adviser status</key> </entry> + <entry> + <key>License</key> + </entry> + <entry> + <key>Contribute map data</key> + </entry> + <entry> + <key>Map data © %0 contributors | %1 | %2</key> + </entry> + <entry> + <key>add Contact to Sync</key> + </entry> + <entry> + <key>ChecklistEntryValue</key> + </entry> + <entry> + <key>remove Contact from Sync</key> + </entry> + <entry> + <key>add to sync</key> + </entry> + <entry> + <key>remove from sync</key> + </entry> + <entry> + <key>add contact to ewssync</key> + </entry> + <entry> + <key>Sync Exchange Contacts</key> + </entry> + <entry> + <key>number of connections</key> + </entry> + <entry> + <key>The given Keyword Category Name is already used but needs to be unique</key> + </entry> + <entry> + <key>Keyword Entries</key> + </entry> + <entry> + <key>Keyword Category</key> + </entry> + <entry> + <key>Keyword Categories</key> + </entry> + <entry> + <key>Keyword Entry</key> + </entry> + <entry> + <key>Category Name</key> + </entry> + <entry> + <key>Migrate keyword containers</key> + </entry> + <entry> + <key>Sorting direction</key> + </entry> + <entry> + <key>Sorting by</key> + </entry> + <entry> + <key>Communication strategy designed</key> + </entry> + <entry> + <key>refresh classifications</key> + </entry> + <entry> + <key>ascending</key> + </entry> + <entry> + <key>Salesproject Phase</key> + </entry> + <entry> + <key>Checklist entry</key> + </entry> + <entry> + <key>Status: \"won\"</key> + </entry> + <entry> + <key>Marketing Workflow</key> + </entry> + <entry> + <key>Salesproject phase</key> + </entry> + <entry> + <key>Project team roles</key> + </entry> + <entry> + <key>Kontext</key> + </entry> + <entry> + <key>Trait</key> + </entry> + <entry> + <key>Offer sent</key> + </entry> + <entry> + <key>To skip a salesproject phase isn't allowed.</key> + </entry> + <entry> + <key>descending</key> + </entry> + <entry> + <key>Probability checked and eventually readjusted</key> + </entry> + <entry> + <key>by translated name</key> + </entry> + <entry> + <key>Document template</key> + </entry> + <entry> + <key>Contract have been signed</key> + </entry> + <entry> + <key>Set completed</key> + </entry> + <entry> + <key>Communication strategy introduced</key> + </entry> + <entry> + <key>Traits</key> + </entry> + <entry> + <key>Workshop for project-realization planned</key> + </entry> <entry> <key>Automatically</key> </entry> + <entry> + <key>Classification fields</key> + </entry> + <entry> + <key>Risk audit performed</key> + </entry> + <entry> + <key>by name</key> + </entry> + <entry> + <key>Checklist entries</key> + </entry> + <entry> + <key>Project start within next 12 months</key> + </entry> + <entry> + <key>Its not allowed to step over some salesproject phases.</key> + </entry> + <entry> + <key>by sorting</key> + </entry> + <entry> + <key>Project team: \"Internal distribution\"</key> + </entry> + <entry> + <key>Probablity: 100%</key> + </entry> + <entry> + <key>Appointment for offer-agreement occured</key> + </entry> + <entry> + <key>Checklist</key> + </entry> + <entry> + <key>Follow-up appointment(s) exists (e.g.: for workshops..)</key> + </entry> + <entry> + <key>Not all prerequisites are fulfilled.</key> + </entry> + <entry> + <key>Project team: \"Project manager\"</key> + </entry> + <entry> + <key>Offer exists</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> + </entry> + <entry> + <key>Recalculate Classifications</key> + </entry> + <entry> + <key>Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed.</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> + </entry> + <entry> + <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/Checklist/Checklist.aod b/neonContext/Checklist/Checklist.aod new file mode 100644 index 0000000000000000000000000000000000000000..d30de3d0d0b4d5fe7e35cf47b845d88b8034d68d --- /dev/null +++ b/neonContext/Checklist/Checklist.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>Checklist</name> + <title>Checklist</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:MQL</icon> + <entity>Checklist_entity</entity> + <references> + <neonViewReference> + <name>bec4bdfb-d61d-418e-ac97-6905b00a0393</name> + <view>ChecklistEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>2a7eb3a8-1ef9-4ecd-a302-42bd676ed24f</name> + <view>ChecklistFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/ChecklistEntry/ChecklistEntry.aod b/neonContext/ChecklistEntry/ChecklistEntry.aod new file mode 100644 index 0000000000000000000000000000000000000000..7ce3bb78ee5dd96197c0fa9707ab800cbe0afb1a --- /dev/null +++ b/neonContext/ChecklistEntry/ChecklistEntry.aod @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>ChecklistEntry</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:MQL</icon> + <entity>ChecklistEntry_entity</entity> + <references> + <neonViewReference> + <name>af6c9ce2-43e8-4076-bd78-58e54c673104</name> + <view>ChecklistEntryMultiEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>53b9dc65-df64-4e1c-bf6f-4854a30bf689</name> + <view>ChecklistEntryList_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/ChecklistEntryValue/ChecklistEntryValue.aod b/neonContext/ChecklistEntryValue/ChecklistEntryValue.aod new file mode 100644 index 0000000000000000000000000000000000000000..842a8f0eed5a50064ca7e6a3b6e3e849b5599c00 --- /dev/null +++ b/neonContext/ChecklistEntryValue/ChecklistEntryValue.aod @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>ChecklistEntryValue</name> + <title>ChecklistEntryValue</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:MQL</icon> + <entity>ChecklistEntryValue_entity</entity> + <references> + <neonViewReference> + <name>12d29401-307b-48cc-8703-a645c8c2f190</name> + <view>ChecklistEntryValueList_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/EwsSyncAddContacts/EwsSyncAddContacts.aod b/neonContext/EwsSyncAddContacts/EwsSyncAddContacts.aod new file mode 100644 index 0000000000000000000000000000000000000000..9f9809ee4ab68bc9abc7fd254e23aba11fb0b2c3 --- /dev/null +++ b/neonContext/EwsSyncAddContacts/EwsSyncAddContacts.aod @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>EwsSyncAddContacts</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <editView>EwsSyncAddContactsEdit_view</editView> + <entity>EwsSyncAddContacts_entity</entity> + <references> + <neonViewReference> + <name>c4d8f240-388e-4a1d-9455-e100a33c4819</name> + <view>EwsSyncAddContactsEdit_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/KeywordCategory/KeywordCategory.aod b/neonContext/KeywordCategory/KeywordCategory.aod new file mode 100644 index 0000000000000000000000000000000000000000..339af18455583a17b912f5df191b0904950d33a8 --- /dev/null +++ b/neonContext/KeywordCategory/KeywordCategory.aod @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>KeywordCategory</name> + <title>Keyword Category</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>KeywordCategoryFilter_view</filterView> + <editView>KeywordCategoryEdit_view</editView> + <previewView>KeywordCategoryPreview_view</previewView> + <entity>KeywordCategory_entity</entity> + <references> + <neonViewReference> + <name>1e20d23b-c7d2-4218-ab81-2e4358eae7bc</name> + <view>KeywordCategoryFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>1daa1f4f-f6d3-4ce7-b83b-2b3617bc2136</name> + <view>KeywordCategoryEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>bc8a8d1d-d5fe-4518-a487-a2530820c78d</name> + <view>KeywordCategoryPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/KeywordEntry/KeywordEntry.aod b/neonContext/KeywordEntry/KeywordEntry.aod index db9d9aa2b1577a069150e06299fd59bb6570372b..605540f62d6ca5743e6c0c4c3892217df14ba252 100644 --- a/neonContext/KeywordEntry/KeywordEntry.aod +++ b/neonContext/KeywordEntry/KeywordEntry.aod @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> <name>KeywordEntry</name> - <title>Keyword</title> + <title>Keyword Entry</title> <description><null value></description> <majorModelMode>DISTRIBUTED</majorModelMode> <filterView>KeywordEntryFilter_view</filterView> @@ -21,5 +21,13 @@ <name>9bb352b9-5a8c-41ac-9c42-7f4f7f4827f3</name> <view>KeywordEntryPreview_view</view> </neonViewReference> + <neonViewReference> + <name>e2b889cf-1159-429b-978e-c005d0306156</name> + <view>KeywordEntryMultiEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>71a850a4-1ec3-4a3f-abc0-f0b6eba2e514</name> + <view>KeywordEntryList_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Product/Product.aod b/neonContext/Product/Product.aod index 7d36aaa10f0f067db17fc1a209b7905efb611917..4a1a49078e0a59b2fd6643f45972170c2e52f505 100644 --- a/neonContext/Product/Product.aod +++ b/neonContext/Product/Product.aod @@ -31,5 +31,9 @@ <name>ec872778-87d1-4070-a3da-3808da326119</name> <view>ProductLookup_view</view> </neonViewReference> + <neonViewReference> + <name>8088a294-78dd-4f7b-8bd3-add1b9fe3d90</name> + <view>ProductDescritption_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Salesproject/Salesproject.aod b/neonContext/Salesproject/Salesproject.aod index 4b997e115ae5c4e69f504b7c85f89b98a9327fb8..57dc7485b7ab4a0cf110be281c8993df2c7663ec 100644 --- a/neonContext/Salesproject/Salesproject.aod +++ b/neonContext/Salesproject/Salesproject.aod @@ -31,10 +31,6 @@ <name>9d4603e0-6e0e-4c9e-af97-f5c059debe9e</name> <view>SalesprojectMilestone_view</view> </neonViewReference> - <neonViewReference> - <name>6640a2aa-cd7f-41d0-ab55-30a99256c2c6</name> - <view>SalesprojectMemberActivity_view</view> - </neonViewReference> <neonViewReference> <name>58afb929-85fb-4aea-a149-25afc9cc7a97</name> <view>SalesprojectMilestoneSource_view</view> @@ -75,5 +71,9 @@ <name>079db4ee-86fc-4985-a253-249622d9f3ce</name> <view>SalesprojectAnalyses_view</view> </neonViewReference> + <neonViewReference> + <name>b50928ae-ad07-40ea-87e7-4f82daf9715c</name> + <view>SalesprojectActivity_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/SalesprojectPhaseDefinition/SalesprojectPhaseDefinition.aod b/neonContext/SalesprojectPhaseDefinition/SalesprojectPhaseDefinition.aod new file mode 100644 index 0000000000000000000000000000000000000000..abfe2caf79a2a03d4170a7b98c04d168ea55d936 --- /dev/null +++ b/neonContext/SalesprojectPhaseDefinition/SalesprojectPhaseDefinition.aod @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>SalesprojectPhaseDefinition</name> + <title>Salesproject phases</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:LIST_UL</icon> + <filterView>SalesprojectPhaseDefinitionFilter_view</filterView> + <editView>SalesprojectPhaseDefinitionEdit_view</editView> + <previewView>SalesprojectPhaseDefinitionPreview_view</previewView> + <devices> + <element>MOBILE</element> + <element>TABLET</element> + <element>DESKTOP</element> + </devices> + <entity>SalesprojectPhaseDefinition_entity</entity> + <references> + <neonViewReference> + <name>41bee035-a20a-4eb1-95ba-190dbacf1c7d</name> + <view>SalesprojectPhaseDefinitionFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>a1eac585-06e1-4a5f-bb7b-4cbacb0710ae</name> + <view>SalesprojectPhaseDefinitionEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>14fcb49f-fd8c-43e4-a3e9-6e6ccd42743c</name> + <view>SalesprojectPhaseDefinitionPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/SupportTicket/documentation.adoc b/neonContext/SupportTicket/documentation.adoc index 3bca58b3124500f53d71883fa7f55ac45ad364ce..f36128eeced596a320c3a68caa4bee3a01cd356d 100644 --- a/neonContext/SupportTicket/documentation.adoc +++ b/neonContext/SupportTicket/documentation.adoc @@ -62,19 +62,6 @@ As soon as you need to hardcode the ticket type keyid (e.g. use $KeywordRegistry ==== setup . add a new TicketType Keyword in liquibase (in your own liquibase folder, not the *basic* folder!) -[source,xml] ----- -<insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="54fd061b-3897-49c7-a1fb-92a35b87c846"/> - <column name="KEYID" value="TESTTICKET"/> - <column name="TITLE" value="Testticket"/> - <column name="CONTAINER" value="TicketType"/> - <column name="SORTING" valueNumeric="1"/> - <column name="ISACTIVE" valueNumeric="1"/> - <column name="ISESSENTIAL" valueNumeric="1"/> -</insert> ----- - . remove the preset of the *TicketType_param*: `SupportTicket_entity -> parameters -> TicketType_param -> valueProcess` comment or remove the process. This will enable the TicketType dropdown in the edit view. . optionally: change the title and titlePlural of the SupportTicket entity to something more generic (such as "Ticket") . deploy @@ -143,28 +130,7 @@ To alter the possible status just add the *availableStatus* keyword attribute: It is also just a json array which contains the Keyid's from the Keyword-Container *TaskStatus*. -If you need different / additional status which is not available in *TaskStatus*, just add it to *TaskStatus*: - -[source,xml] ----- -<insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="dbbe484b-be80-4be5-a804-e4aa877f25a2"/> - <column name="KEYID" value="SUPERSTATUS"/> - <column name="TITLE" value="superstatus"/> - <column name="CONTAINER" value="TaskStatus"/> - <column name="SORTING" valueNumeric="110"/> - <column name="ISACTIVE" valueNumeric="1"/> - <column name="ISESSENTIAL" valueNumeric="0"/> -</insert> - -<!-- the Icon used by this new status --> -<insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> - <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="03581cd1-1372-43b0-b10e-2bae51a4df30"/> - <column name="AB_KEYWORD_ENTRY_ID" value="dbbe484b-be80-4be5-a804-e4aa877f25a2"/> - <column name="AB_KEYWORD_ATTRIBUTE_ID" value="472f9bc2-3331-49f9-aba2-72d5eeb89654"/> - <column name="CHAR_VALUE" value="NEON:STATUS_NOT_ASSIGNED"/> -</insert> ----- +If you need different / additional status which is not available in *TaskStatus*, just add it to *TaskStatus* Then you can add it to the *availableStatus* array described above @@ -185,17 +151,7 @@ If you just would like to extend the SupportTicket (or another custom context) b Here an example to add a configuration for hiding the progress-field for certain types. -. first you have to define a new keyword attribute: -+ -[source,xml] ----- -<insert tableName="AB_KEYWORD_ATTRIBUTE"> - <column name="AB_KEYWORD_ATTRIBUTEID" value="c33ce01f-02f2-41ac-b2be-92e5fca67e31"/> - <column name="NAME" value="hideProgress"/> - <column name="CONTAINER" value="TicketType"/> - <column name="KIND" value="BOOL_VALUE"/> -</insert> ----- +. first you have to define a new keyword attribute. + . Then you need to assign *true* (1) to all types which you would like to hide the progress: + diff --git a/neonView/CampaignPreview_view/CampaignPreview_view.aod b/neonView/CampaignPreview_view/CampaignPreview_view.aod index ec8f409750341079fcb3b9df759203224d129457..b593d6ee9b2adf5e547c89853ff5bcdd33bb79ae 100644 --- a/neonView/CampaignPreview_view/CampaignPreview_view.aod +++ b/neonView/CampaignPreview_view/CampaignPreview_view.aod @@ -24,7 +24,7 @@ </cardViewTemplate> <favoriteViewTemplate> <name>Favorites</name> - <objectType>CAMPAIGN_OBEJCTTYPE</objectType> + <objectType>CAMPAIGN_OBJECTTYPE</objectType> <rowId>#UID</rowId> <entityField>#ENTITY</entityField> <title>favorites</title> diff --git a/neonView/ChecklistEdit_view/ChecklistEdit_view.aod b/neonView/ChecklistEdit_view/ChecklistEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..30049e3d38f17bc7eb5145ee1b0ad04c40f5bf4c --- /dev/null +++ b/neonView/ChecklistEdit_view/ChecklistEdit_view.aod @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ChecklistEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <neonViewReference> + <name>8499691f-153d-43ee-829e-d586255d9344</name> + <view>ChecklistEntryMultiEdit_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/ChecklistEntryList_view/ChecklistEntryList_view.aod b/neonView/ChecklistEntryList_view/ChecklistEntryList_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..9928f472cbbf54d997ab646bf4987464c0517791 --- /dev/null +++ b/neonView/ChecklistEntryList_view/ChecklistEntryList_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ChecklistEntryList_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <titledListViewTemplate> + <name>titledListViewTemplate</name> + <titleField>TYPE</titleField> + <columns> + <neonTitledListTableColumn> + <name>49ad66e3-645d-489a-8bf8-d56645cf5465</name> + <entityField>TITLE</entityField> + <fullWidth v="true" /> + </neonTitledListTableColumn> + </columns> + </titledListViewTemplate> + </children> +</neonView> diff --git a/neonView/ChecklistEntryMultiEdit_view/ChecklistEntryMultiEdit_view.aod b/neonView/ChecklistEntryMultiEdit_view/ChecklistEntryMultiEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..5aa3bfcacebf9b5f8e7732eafb144f629d594d17 --- /dev/null +++ b/neonView/ChecklistEntryMultiEdit_view/ChecklistEntryMultiEdit_view.aod @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ChecklistEntryMultiEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericMultipleViewTemplate> + <name>genericMultipleViewTemplate</name> + <title>Checklist entries</title> + <columns> + <neonGenericMultipleTableColumn> + <name>f139b472-471b-45ef-8406-f11fe052e246</name> + <entityField>TYPE</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>ed1eb021-aad1-4228-bcdf-eef2d44f53f8</name> + <entityField>TITLE</entityField> + </neonGenericMultipleTableColumn> + </columns> + </genericMultipleViewTemplate> + </children> +</neonView> diff --git a/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod b/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..1f86e623f5d6595e1b58d4abd826ef2e87dd29b3 --- /dev/null +++ b/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ChecklistEntryValueList_view</name> + <title>Checklist entries</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + <direction>HORIZONTAL</direction> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>tableViewTemplate</name> + <iconField>#IMAGE</iconField> + <favoriteActionGroup1>setChecklistEntryCompleted</favoriteActionGroup1> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTableColumn> + <name>6ccac432-a75f-42f3-915a-4e02c141ddb8</name> + <entityField>#IMAGE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>35a60394-91ad-4e39-85b4-683564604e97</name> + <entityField>type</entityField> + </neonTableColumn> + <neonTableColumn> + <name>56a78ef9-dcef-4d1c-b30d-5c89f38611ec</name> + <entityField>CHECKLISTENTRY_ID</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/ChecklistFilter_view/ChecklistFilter_view.aod b/neonView/ChecklistFilter_view/ChecklistFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..81105b42d24250da3b0b6217efea767043b97454 --- /dev/null +++ b/neonView/ChecklistFilter_view/ChecklistFilter_view.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ChecklistFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> +</neonView> diff --git a/neonView/ClassificationTree_view/ClassificationTree_view.aod b/neonView/ClassificationTree_view/ClassificationTree_view.aod index d716cc7ddad99a078168f38f67b53ae66dde236e..4d7d91c696787b2329a89ee872308fea857c45f7 100644 --- a/neonView/ClassificationTree_view/ClassificationTree_view.aod +++ b/neonView/ClassificationTree_view/ClassificationTree_view.aod @@ -10,9 +10,9 @@ <children> <treeTableViewTemplate> <name>ClassificationTreeTable</name> - <hideActions v="true" /> <showChildrenCount v="false" /> <entityField>#ENTITY</entityField> + <favoriteActionGroup1>fitlerviewActionGroup</favoriteActionGroup1> <linkedColumns /> <defaultGroupFields> <element>CLASSIFICATIONGROUP</element> diff --git a/neonView/EwsSyncAddContactsEdit_view/EwsSyncAddContactsEdit_view.aod b/neonView/EwsSyncAddContactsEdit_view/EwsSyncAddContactsEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..74bbe50bf1c6529cfb43c1c895441220675f604e --- /dev/null +++ b/neonView/EwsSyncAddContactsEdit_view/EwsSyncAddContactsEdit_view.aod @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>EwsSyncAddContactsEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <scoreCardViewTemplate> + <name>ewsSyncScorecard</name> + <fields> + <entityFieldLink> + <name>bb922a4f-c170-4158-9241-8ba04ae92370</name> + <entityField>countForSync</entityField> + </entityFieldLink> + </fields> + </scoreCardViewTemplate> + <actionsViewTemplate> + <name>syncAction</name> + <actions> + <element>syncContacts</element> + <element>removeSyncContacts</element> + </actions> + </actionsViewTemplate> + </children> +</neonView> diff --git a/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod b/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod index 928c26ae36256a54d7541790081929d017a65e6d..04b2c96229f6ffff2f5d5a0c004ab7eeb2a4829e 100644 --- a/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod +++ b/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod @@ -16,8 +16,8 @@ <entityField>#ENTITY</entityField> <fields> <entityFieldLink> - <name>88fcd6c8-8dfc-4a1d-96d9-33412768feb9</name> - <entityField>CONTAINER</entityField> + <name>69049ecf-c6be-4b19-bb5c-1ba1f065446b</name> + <entityField>AB_KEYWORD_CATEGORY_ID</entityField> </entityFieldLink> <entityFieldLink> <name>4e120b1d-1016-41a1-abe7-9d28f8053380</name> diff --git a/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod b/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod index e9cac340595a2c181282ab3a39313a41c4b332f5..a212bffda8766c38a24dddf71cfbe8c5e06b1ac3 100644 --- a/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod +++ b/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod @@ -13,7 +13,7 @@ <name>Attributes</name> <hideContentSearch v="false" /> <titleField>NAME</titleField> - <subtitleField>CONTAINER</subtitleField> + <subtitleField>AB_KEYWORD_CATEGORY_ID</subtitleField> <descriptionField>TYPE</descriptionField> <autoNewRow v="true" /> <entityField>#ENTITY</entityField> @@ -23,8 +23,8 @@ <entityField>#ICON</entityField> </neonTableColumn> <neonTableColumn> - <name>7efe2ae9-8b76-439f-95cb-547f7dec9057</name> - <entityField>CONTAINER</entityField> + <name>0c8313b6-897b-4bc2-894b-f850ed75f63b</name> + <entityField>AB_KEYWORD_CATEGORY_ID</entityField> </neonTableColumn> <neonTableColumn> <name>682fd08f-b121-469c-b86e-afdf013dbc7b</name> @@ -45,8 +45,8 @@ <entityField>#ICON</entityField> </neonTreeTableColumn> <neonTreeTableColumn> - <name>f1e9f968-4b54-4923-a5e4-876097d9e340</name> - <entityField>CONTAINER</entityField> + <name>860e78bc-65e9-4104-b80c-1255abf27d2c</name> + <entityField>AB_KEYWORD_CATEGORY_ID</entityField> </neonTreeTableColumn> <neonTreeTableColumn> <name>5054102d-62aa-43c4-9a38-5ed7d31eecb9</name> diff --git a/neonView/KeywordCategoryEdit_view/KeywordCategoryEdit_view.aod b/neonView/KeywordCategoryEdit_view/KeywordCategoryEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..4d8ce0be1755300dbf67616c48f70cb4cea1618f --- /dev/null +++ b/neonView/KeywordCategoryEdit_view/KeywordCategoryEdit_view.aod @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>KeywordCategoryEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericViewTemplate> + <name>CategoryEdit</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>baf076dd-1119-4604-82da-47b462428b46</name> + <entityField>NAME</entityField> + </entityFieldLink> + <entityFieldLink> + <name>4ab1775f-9ab2-4c41-a9a7-e366df2a85cb</name> + <entityField>SORTINGBY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>6f01e1b2-15fb-4734-a14e-e788aa8096f2</name> + <entityField>SORTINGDIRECTION</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <neonViewReference> + <name>b5c2e29f-564c-4d78-873b-43e9376534d8</name> + <entityField>OrderedBySortingFieldKeywordsConsumer</entityField> + <view>KeywordEntryMultiEdit_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/KeywordCategoryFilter_view/KeywordCategoryFilter_view.aod b/neonView/KeywordCategoryFilter_view/KeywordCategoryFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..468500bf58a471aff225f42c3d4311bc5c954c5d --- /dev/null +++ b/neonView/KeywordCategoryFilter_view/KeywordCategoryFilter_view.aod @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>KeywordCategoryFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>CategoryTable</name> + <entityField>#ENTITY</entityField> + <columns> + <neonTableColumn> + <name>b5f0f090-3dd8-4407-a1a0-7eff8391017e</name> + <entityField>NAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>aeb1a10f-0d69-4943-b0d8-0c4395d9b9db</name> + <entityField>SORTINGBY</entityField> + </neonTableColumn> + <neonTableColumn> + <name>10b78f77-574f-4113-bc67-397419dd579b</name> + <entityField>SORTINGDIRECTION</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/KeywordCategoryPreview_view/KeywordCategoryPreview_view.aod b/neonView/KeywordCategoryPreview_view/KeywordCategoryPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..febe2de1022188fc96b43928c5b550236cbaf8df --- /dev/null +++ b/neonView/KeywordCategoryPreview_view/KeywordCategoryPreview_view.aod @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>KeywordCategoryPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>header</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>header</name> + <titleField>#CONTENTTITLE</titleField> + <subtitleField>SORTINGBY</subtitleField> + <descriptionField>SORTINGDIRECTION</descriptionField> + <entityField>#ENTITY</entityField> + </cardViewTemplate> + <neonViewReference> + <name>7c54144c-2653-4dcb-a2a1-3e59a78a6fd5</name> + <entityField>OrderedByNameFieldKeywordsConsumer</entityField> + <view>KeywordEntryList_view</view> + </neonViewReference> + <neonViewReference> + <name>d8e67a1f-d8de-4874-97b0-4b5b157f61a0</name> + <entityField>OrderedBySortingFieldKeywordsConsumer</entityField> + <view>KeywordEntryList_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod b/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod index 27de2596699ab9e0aa3b0368ad9765fcb55197d2..c384aecd42eea03270ea0e10cbbb34099ed6ad6b 100644 --- a/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod +++ b/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod @@ -16,8 +16,8 @@ <entityField>#ENTITY</entityField> <fields> <entityFieldLink> - <name>236c9d71-a619-47b5-b5a0-8d4e5bc45903</name> - <entityField>CONTAINER</entityField> + <name>8b14494e-6de4-4d2c-a4c6-a9f6613be569</name> + <entityField>AB_KEYWORD_CATEGORY_ID</entityField> </entityFieldLink> <entityFieldLink> <name>f7f66b08-521c-46bf-b6e9-3c3f130648bc</name> diff --git a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod index f8742663636cd3fa2aef8b5aa0037649574fff70..efd8bf78f7c8605f00de542b3b0eddc416218d00 100644 --- a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod +++ b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod @@ -16,7 +16,7 @@ <hideContentSearch v="false" /> <entityField>#ENTITY</entityField> <defaultGroupFields> - <element>CONTAINER</element> + <element>AB_KEYWORD_CATEGORY_ID</element> </defaultGroupFields> <maxDBRow v="400" /> <isCreatable v="true" /> @@ -45,7 +45,7 @@ <name>EntriesTable</name> <hideContentSearch v="false" /> <titleField>TITLE</titleField> - <subtitleField>CONTAINER</subtitleField> + <subtitleField>AB_KEYWORD_CATEGORY_ID</subtitleField> <entityField>#ENTITY</entityField> <title></title> <columns> @@ -55,7 +55,7 @@ </neonTableColumn> <neonTableColumn> <name>7f8c3b75-62dc-4826-bad3-99aa9d471067</name> - <entityField>CONTAINER</entityField> + <entityField>AB_KEYWORD_CATEGORY_ID</entityField> </neonTableColumn> <neonTableColumn> <name>4dc50d75-d856-4fca-bd4d-d79eb3c8769f</name> diff --git a/neonView/KeywordEntryList_view/KeywordEntryList_view.aod b/neonView/KeywordEntryList_view/KeywordEntryList_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..7353fb5fc38b0cdcb277b7cdf492046cd4816ed9 --- /dev/null +++ b/neonView/KeywordEntryList_view/KeywordEntryList_view.aod @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>KeywordEntryList_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <titledListViewTemplate> + <name>KeywordList</name> + <titleField>KEYID_alwaysReadOnly</titleField> + <fixedDrawer v="true" /> + <autoNewRow v="false" /> + <entityField>#ENTITY</entityField> + <isDeletable v="false" /> + <isCreatable v="false" /> + <isEditable v="false" /> + <columns> + <neonTitledListTableColumn> + <name>059eac66-9187-4d85-bcd3-0b769b63b54c</name> + <entityField>TITLE</entityField> + </neonTitledListTableColumn> + <neonTitledListTableColumn> + <name>ec5245a3-69a2-4daa-9fc8-79378c77e5d5</name> + <entityField>TITLE_TRANSLATED</entityField> + </neonTitledListTableColumn> + <neonTitledListTableColumn> + <name>123bfe61-eef6-48fd-bd03-6455394dcb79</name> + <entityField>SORTING</entityField> + </neonTitledListTableColumn> + </columns> + </titledListViewTemplate> + </children> +</neonView> diff --git a/neonView/KeywordEntryMultiEdit_view/KeywordEntryMultiEdit_view.aod b/neonView/KeywordEntryMultiEdit_view/KeywordEntryMultiEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..a0ce7c0a967e383c7fc807f8fa60a966317004e7 --- /dev/null +++ b/neonView/KeywordEntryMultiEdit_view/KeywordEntryMultiEdit_view.aod @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>KeywordEntryMultiEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericMultipleViewTemplate> + <name>KeywordMultiEdit</name> + <entityField>#ENTITY</entityField> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="true" /> + <columns> + <neonGenericMultipleTableColumn> + <name>4781603d-8c65-4267-9354-6faf8713ce62</name> + <entityField>KEYID_alwaysReadOnly</entityField> + <fullWidth v="false" /> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>94f13a43-c915-4eba-857c-b0e389c3ee75</name> + <entityField>TITLE</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>2d1f25dc-03ab-4735-996f-be2b6477e740</name> + <entityField>TITLE_TRANSLATED</entityField> + </neonGenericMultipleTableColumn> + </columns> + </genericMultipleViewTemplate> + </children> +</neonView> diff --git a/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod b/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod index 31e0284b8d08e317abd164281b40d65a318dfb58..d87afc69b390fb15619324fea66cddf89115c71e 100644 --- a/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod +++ b/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod @@ -12,7 +12,7 @@ <cardViewTemplate> <name>Header</name> <titleField>TITLE</titleField> - <subtitleField>CONTAINER</subtitleField> + <subtitleField>AB_KEYWORD_CATEGORY_ID</subtitleField> <descriptionField>KEYID</descriptionField> <entityField>#ENTITY</entityField> </cardViewTemplate> diff --git a/neonView/LeadimportFilter_view/LeadimportFilter_view.aod b/neonView/LeadimportFilter_view/LeadimportFilter_view.aod index 5d877503efcf5ae4bc33bfb5c893b37ee2a32312..3e22dae8dcc9dbd2598cc3bd9c2bbbd27d3cfbaa 100644 --- a/neonView/LeadimportFilter_view/LeadimportFilter_view.aod +++ b/neonView/LeadimportFilter_view/LeadimportFilter_view.aod @@ -36,32 +36,5 @@ </neonTableColumn> </columns> </tableViewTemplate> - <treeTableViewTemplate> - <name>Treetable</name> - <entityField>#ENTITY</entityField> - <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1> - <columns> - <neonTreeTableColumn> - <name>5b550d07-b92f-4429-a9f7-e18013aa3280</name> - <entityField>#IMAGE</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>e25d671d-50c8-4c77-9a2b-8214b0b87814</name> - <entityField>NAME</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>3ffd6131-6064-4ca2-958b-50f7eef0b3e1</name> - <entityField>IMPORTSOURCE</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>5fe0eed1-ed45-478d-b84e-ad65e1e5fd0a</name> - <entityField>LEADIMPORT_DATE</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>9563e615-fc93-406f-8cbb-2eceafc5bcc4</name> - <entityField>STATUS</entityField> - </neonTreeTableColumn> - </columns> - </treeTableViewTemplate> </children> </neonView> diff --git a/neonView/ProductDescritption_view/ProductDescritption_view.aod b/neonView/ProductDescritption_view/ProductDescritption_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..a85032efe375759d5f49e7390f426496a523036a --- /dev/null +++ b/neonView/ProductDescritption_view/ProductDescritption_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ProductDescritption_view</name> + <title>Description</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>d1bc2777-ee77-4604-8d7e-735ec79ed551</name> + <entityField>KnowledgeManagements</entityField> + <view>KnowledgeManagementFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>1871fa72-d36b-43bd-937b-822ea7c2a08d</name> + <entityField>DescriptionTranslations</entityField> + <view>DescriptionTranslationFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/ProductMain_view/ProductMain_view.aod b/neonView/ProductMain_view/ProductMain_view.aod index a0a76cf31db42a5b373709903fa7318edbecafb1..861b85ac39a6409f4ba8f423b3b844909373c7ab 100644 --- a/neonView/ProductMain_view/ProductMain_view.aod +++ b/neonView/ProductMain_view/ProductMain_view.aod @@ -25,9 +25,9 @@ <view>TaskFilter_view</view> </neonViewReference> <neonViewReference> - <name>c647d35b-3535-4acf-b6cb-c9786a353b08</name> - <entityField>DescriptionTranslations</entityField> - <view>DescriptionTranslationFilter_view</view> + <name>7a475d46-0ce9-4fd3-ab5b-c5c625a4a3fa</name> + <entityField>#ENTITY</entityField> + <view>ProductDescritption_view</view> </neonViewReference> <neonViewReference> <name>7f416115-ff89-45ca-be10-ed568cac266c</name> diff --git a/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod b/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod index 896078f3187b59918e2fdbcd20b65824c5e40cd7..9680051e7399c4618b4de58476ce62cceb09a850 100644 --- a/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod +++ b/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod @@ -107,6 +107,7 @@ <element>PRICE</element> <element>VALID_FROM</element> <element>VALID_TO</element> + <element>PRODUCT_ID</element> </editableColumns> <columns> <neonTableColumn> @@ -140,11 +141,18 @@ </columns> <editRendererMapping> <rendererMappingEntry> - <name>cef3f0d1-1976-4c69-add7-49a37893c56b</name> + <name>6bd04999-36b5-4278-a975-a24414058b8e</name> <fieldName>PRICE</fieldName> <renderer>numberInput</renderer> </rendererMappingEntry> </editRendererMapping> + <viewRendererMapping> + <rendererMappingEntry> + <name>cece5a67-394e-4fd2-8b2d-f39660290cee</name> + <fieldName>PRICELIST</fieldName> + <renderer>badge</renderer> + </rendererMappingEntry> + </viewRendererMapping> </multiEditTableViewTemplate> </children> </neonView> diff --git a/neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod b/neonView/SalesprojectActivity_view/SalesprojectActivity_view.aod similarity index 53% rename from neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod rename to neonView/SalesprojectActivity_view/SalesprojectActivity_view.aod index 254223bff73235d58283d76d7473af11091bbb16..18b9c192333e6822587abb11dd42a723418942c4 100644 --- a/neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod +++ b/neonView/SalesprojectActivity_view/SalesprojectActivity_view.aod @@ -1,24 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>SalesprojectMemberActivity_view</name> - <title>Project</title> + <name>SalesprojectActivity_view</name> + <title>Activity</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> - <boxLayout> + <noneLayout> <name>layout</name> - <direction>VERTICAL</direction> - <maxDirectionElements v="0" /> - <autoHeight v="false" /> - </boxLayout> + </noneLayout> </layout> <children> <neonViewReference> - <name>ebf752f4-653d-4de3-9c81-c3e6ef692c48</name> - <entityField>Members</entityField> - <view>MemberDrawer_view</view> - </neonViewReference> - <neonViewReference> - <name>5e9b2286-227e-494d-a252-be29a50a093a</name> + <name>5564d68a-76dc-44cc-9f76-3894e069c295</name> <entityField>Activities</entityField> <view>ActivityDrawer_view</view> </neonViewReference> diff --git a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod index b02721165a527986f256ba2d41137c3529fde450..888b2580c7beec222342d1498e8d057d6717eacf 100644 --- a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod +++ b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod @@ -88,6 +88,10 @@ <name>88e6bebb-e83d-43ec-82f1-cc778fac458e</name> <entityField>CLASSIFICATIONVALUE</entityField> </neonTableColumn> + <neonTableColumn> + <name>c00e5148-54c8-488d-817a-2938e124871b</name> + <entityField>DATE_NEW</entityField> + </neonTableColumn> <neonTableColumn> <name>fec843c3-f7c0-42c7-8295-50386651edb2</name> <entityField>STARTDATE</entityField> @@ -137,6 +141,10 @@ <name>6d9d1365-985a-4357-8ecc-16ddcc201ea8</name> <entityField>CLASSIFICATIONVALUE</entityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>c5e66669-4e12-4933-94e9-7db5c7688250</name> + <entityField>DATE_NEW</entityField> + </neonTreeTableColumn> <neonTreeTableColumn> <name>745d6192-4817-49e6-8cb2-8470c9c25f4d</name> <entityField>STARTDATE</entityField> diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod index 2c70a12bb05841e7fd655728375d81c5445aa686..43368c01548b156b25d2389c85c30878e3a071c1 100644 --- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod +++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod @@ -22,7 +22,7 @@ <neonViewReference> <name>d4daa13e-bf57-45e4-af43-d58c04f113f5</name> <entityField>#ENTITY</entityField> - <view>SalesprojectMemberActivity_view</view> + <view>SalesprojectActivity_view</view> </neonViewReference> <neonViewReference> <name>7ac103ea-1131-41e0-85ce-e7d2fc86dfd8</name> diff --git a/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod b/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod index 38e7a6f7308dd471f5bcc7e7fe69d2d45e858c77..64be620c66f0e976034988cee063a49f7ea38638 100644 --- a/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod +++ b/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod @@ -15,18 +15,14 @@ <view>SalesprojectPhase_view</view> </neonViewReference> <neonViewReference> - <name>7c365878-0f88-4bc3-aed4-0667951e70af</name> - <entityField>SalesprojectPhaseMilestones</entityField> - <view>SalesprojectMilestoneInfo_view</view> - <devices> - <element>TABLET</element> - <element>DESKTOP</element> - </devices> + <name>43b80a09-de18-43ac-9d4f-d344cefc0381</name> + <entityField>ChecklistEntryValues</entityField> + <view>ChecklistEntryValueList_view</view> </neonViewReference> <neonViewReference> - <name>729108f8-a054-4ea7-9ef8-14b686c6340b</name> - <entityField>SalesprojectForecastCharts</entityField> - <view>TurnoverChartForcastDrawer_view</view> + <name>3e0550aa-832e-4d6c-a653-f765d92bbd86</name> + <entityField>Members</entityField> + <view>MemberDrawer_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod b/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..eae1779df434052cfd229767a2055813e6527285 --- /dev/null +++ b/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>SalesprojectPhaseDefinitionEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericViewTemplate> + <name>genericViewTemplate</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>db76830d-c140-4205-bc32-57ad6cb8fb7b</name> + <entityField>PHASE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f0aa8dd0-2cc1-4634-9509-db8b511e602d</name> + <entityField>DESCRIPTION</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <neonViewReference> + <name>def21f47-1a93-4865-a92c-5015243955e8</name> + <entityField>ChecklistEntries</entityField> + <view>ChecklistEntryMultiEdit_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/SalesprojectPhaseDefinitionFilter_view/SalesprojectPhaseDefinitionFilter_view.aod b/neonView/SalesprojectPhaseDefinitionFilter_view/SalesprojectPhaseDefinitionFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..d7e3bd3cc976e7fb9fa401ffd7984140773daa5d --- /dev/null +++ b/neonView/SalesprojectPhaseDefinitionFilter_view/SalesprojectPhaseDefinitionFilter_view.aod @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>SalesprojectPhaseDefinitionFilter_view</name> + <title>Traits</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <tableViewTemplate> + <name>tableViewTemplate</name> + <iconField>#ICON</iconField> + <entityField>#ENTITY</entityField> + <linkedColumns /> + <title>Traits</title> + <columns> + <neonTableColumn> + <name>64a213a9-5429-4e6b-9f7e-e23beb9f15b9</name> + <entityField>#ICON</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7cd4dd99-ffc7-4207-9e81-874a5c71c2c2</name> + <entityField>PHASE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>80ea1a84-c6a1-4a12-b2fb-18c78d526119</name> + <entityField>traitCount</entityField> + </neonTableColumn> + <neonTableColumn> + <name>b44c14af-9a2a-405f-8e6a-e02fd9403c20</name> + <entityField>DESCRIPTION</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..a2fe192db764301468d9b71198c550cc677cf3de --- /dev/null +++ b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>SalesprojectPhaseDefinitionPreview_view</name> + <title>Traits</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>cardViewTemplate</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>cardViewTemplate</name> + <iconField>#ICON</iconField> + <titleField>PHASE</titleField> + <subtitleField>SalesprojectPhaseFullname</subtitleField> + <entityField>#ENTITY</entityField> + </cardViewTemplate> + <neonViewReference> + <name>786e8ccd-b846-4968-8b6c-9e8cf13ba63c</name> + <entityField>ChecklistEntries</entityField> + <view>ChecklistEntryList_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/SalesprojectPhaseInfoTraitList_view/SalesprojectPhaseInfoTraitList_view.aod b/neonView/SalesprojectPhaseInfoTraitList_view/SalesprojectPhaseInfoTraitList_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..66589d53af1ec84be40e2d12d8226dc700d5edec --- /dev/null +++ b/neonView/SalesprojectPhaseInfoTraitList_view/SalesprojectPhaseInfoTraitList_view.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>SalesprojectPhaseInfoTraitList_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> +</neonView> diff --git a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod index 639a366fda49c2757384fcace20e621ee9267310..db91bfb1b79095049298c48c0484e54c78c05269 100644 --- a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod +++ b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod @@ -18,6 +18,7 @@ <descriptionField>PROJECTCODE</descriptionField> <favoriteAction1>newActivity</favoriteAction1> <entityField>#ENTITY</entityField> + <informationField>DATE_NEW</informationField> </cardViewTemplate> <favoriteViewTemplate> <name>Favorites</name> diff --git a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod index 3d50021ba764c65d7988291de910790a9c9f4e33..e4cd6299bc886c4b7d4e78d294cad6edfce3c4fe 100644 --- a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod +++ b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod @@ -38,34 +38,5 @@ </neonTableColumn> </columns> </tableViewTemplate> - <treeTableViewTemplate> - <name>Treetable</name> - <entityField>#ENTITY</entityField> - <linkedColumns> - <element>TITLE</element> - </linkedColumns> - <columns> - <neonTreeTableColumn> - <name>cae0d686-5109-4106-9b35-421e79e265db</name> - <entityField>ICON</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>a5a9f4f1-14ad-4997-94c7-f76de7c5f8da</name> - <entityField>TITLE</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>dc1a061a-95fa-499e-aee4-9b49aed28cfc</name> - <entityField>STATUS</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>ec667f9a-65e3-482c-a459-87545b22af2a</name> - <entityField>DOCUMENTTEMPLATE_ID</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>88b074e6-587a-477f-97d6-fde128cae267</name> - <entityField>DESCRIPTION</entityField> - </neonTreeTableColumn> - </columns> - </treeTableViewTemplate> </children> </neonView> diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index dcde040f6ad0ef4b379084e096b42a01b14966d8..880f20c2d38b04c1ecdeadd1245ad5134b4c6667 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<preferences xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="3.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/preferences/3.2.1"> +<preferences xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="3.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/preferences/3.2.2"> <name>_____PREFERENCES_PROJECT</name> <majorModelMode>DISTRIBUTED</majorModelMode> <customized /> @@ -56,6 +56,36 @@ <attachmentHandling>ALL</attachmentHandling> </mailbridgeMailserver> </mailBridgeMailserver> + <customConfigProperties> + <customBooleanProperty> + <name>sigparser.isEnabled</name> + <description>Whether the webservice sigparser, for mail signature parsing is useable or not.</description> + </customBooleanProperty> + <customBooleanProperty> + <name>abbyy.ocr.isEnabled</name> + <description>Whether the webservice abbyy ocr, is useable or not.</description> + </customBooleanProperty> + <customStringProperty> + <name>abbyy.ocr.appId</name> + <description>The application id for the webservice abbyy ocr.</description> + </customStringProperty> + <customPasswordProperty> + <name>abbyy.ocr.password</name> + <description>The password for the webservice abbyy ocr.</description> + </customPasswordProperty> + <customPasswordProperty> + <name>sigparser.apiKey</name> + <description>The api key to authenticate at the mail signature webservice sigparser.</description> + </customPasswordProperty> + <customStringProperty> + <name>sigparser.apiUrl</name> + <description>The url to the mail signature webservice sigparser.</description> + </customStringProperty> + <customBooleanProperty> + <name>dataCaching.client.forceDisable</name> + <description>Enabling this option will disable the per-client-context data-cache within the customzing (for exameple the caching of Keywords). This is usefull if you're testing and want to frequently add data like keywords, etc. which are cached which help of the "DataCaching_lib".</description> + </customBooleanProperty> + </customConfigProperties> <customProperties> <customBooleanProperty> <name>phoneValidation.enable</name> @@ -125,34 +155,4 @@ <property>base64:iVBORw0KGgoAAAANSUhEUgAAAM4AAABRCAYAAACaL5lSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA4QzAyM0IwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA4QzAyM0MwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDhDMDIzOTBEQjAxMUU0QUYwNEQzRUQyMTFGOUFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDhDMDIzQTBEQjAxMUU0QUYwNEQzRUQyMTFGOUFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhF3nYoAAAlvSURBVHja7J1fjBXVHcfPJQJRoe1urQYJRBYlMUJisqwvGNjY3WgEUtN2CeWBIGb3Ju6LElsW+gA8AHe1UfuwTcBASB/Q7CZNG0tjw2pWU15kNzEBJFnLqmvQBNEbU0pbX+jve+9vlrOzM/fOnTtz78zs95P8cv/MOTPnzJzvnN/5zZ+Tu3XrliGE1MYC7gJCKBxCKBxCKBxCKBxCKBxCCIVDCIVDCIVDCIVDyDzmDq8/d+1/PY5trRB7VGyt2BqxVWLLxe4RW6JpbohdF7sq9qnYpNhFsY/Evoi6QKeOvMAWQKITToQ8LPaEWKfYBrFlVdL/SO1BsU3W/1+JnRMbE3tP7DIPHcmicLrFfia2VWxlBOuD4H6pNi32tthfxM7yEJIsCAc9yw6x7WJLYyozhNgvtlPsLbHT2hMRkjrhYPzynNhu/d4IIMxesafEToqdiGMcREhcwnlKe4AtTaoDhHpArF1sSOwdHlYSN/WGo/Niv2+iaGy2aFnyPKwkqT1OTmyf2pIE1Qdh7t+J/VjsqBgfbyWJEU5OXaMDCa0ThHxYbJHYIYqHJMVV25dg0dgc0LIS0nTh5FPWGPdxzEOaLRxEz/YkbEwTxG3bo2UnpOHCQci3XwffaWONln0FDzdptHBwcXNLiuu5RetASMOE02nKdwSknd1aF0IaIpwdGXFzVmhdCIldOLjLeXuG6rtd60RIrMLBowFLM1TfpVonQmITDh5C25rBOm/VuhESi3Dw5ObKDNZ5pdaNkFiE05nhenfy0JM4hIMI1IYM13uD4QVREoNw8DaaZRmu9zKtIyGh8HusYG3UG/pJ6w/NKy89O/P70j+nzSsn/zTz+5EHV5oHlt9rep58fFa+sQ8vmEtXps35C5/4+12PrTMP3H9v6dMGeZAX6/Cp49tsAiRK4TTsnrS771xsdj3TZTrWPeQrCtiljmnzhzfPmH//538zyyC0/l9tLonSC6wT1tmxzgxJ3q+//a4pdSTzx1Vb1SjR/Hr3L3xFY4MeCWnt3wf7d/iKxgYC+83un7vTruLhJ1H3OMsbsfHnpbdAo0Yv8rcPzpsz74/P6i3QU0AgtgA2b1pvPhQXDHltd+7MB+MzPQrSIa/tukE0mzeuN6f+/O6cOuZyubrr0tvb12bK73nDZ/cbbxwfzWKD2Tnw2l75KIiN/rHwYibvwggyobSfcO6Ju3COINDYX5axjsuNKo1PYLue+eksATy9scN0rF1T6q0AxkkYL9l8dvWaOXX1XfPZl9dK+W23zxJY1HXsUtEANK7RBDf+s1reakyJOFa7/utz6ivr6ZLlmTxBhHXVGvawmsfYYxYjf//HrHENBIMexVnmFs2cwIJr+WO33cKo64gGNKXfBzPcZo479Z2voqnU4zQENGz0DpWAaJAOLpoNxGa7dn6cv/jJbHfv/vtiqYu4ZhDN6pQd/5rdLUk/mPETQ109zo2GCOf8hUDpPr4yHTqvu8exAgQ3DCERC+d63BtGT1Ktt3G45uHK+VybmYPbDbSEc52Hn0QtnKtxb7jSuKZaWojOHvfUkt8JKjSijmT+jXEwqdOmeHuc/4bOe7OOvK46etLb24eoWI8pv4/aHhSP+IWZNRx9RX/mJd3xasvlP2wDUSo7wlUaQ8jyYrUKhClnvewceO2Yltkr4maHq0vLEXkz5SijU8duJ6jgXpf8btPfe937Q5YXNU+LpilYaSY0zUiVsrdrObD+FmsR8o1Uyx+kx5mcByeNSa/GLzauB6XdtRgH66w21rqR9aDRDJu5YWGsf1yF5pe3YeWsU2QoW6DQt6a94hLNzP6AYFRY4y7RGN0Hwypav/UXrLwtrsU91fIHFc7FeSCci67G2KIHGQehqL1CDmbK0TLnbFSQtH11brtPbdDaRqu5Hept82hAzShnveDEgN5ltZzNc2pePaFTJ5S9Fel89sewfs876zPlR+GdywAFFZcX7VYPtj5E/kCuGubcxPSBWb1D+iuto01BDwp2YreGl0vo923SEIf17LTXOqhhaHe7c+qa5VUYJRdOvg94uGxRlhMXMStdJu+u41oNyjgRMNzdoq7SNucPdc3y2pC7rBPJNtulQvkkTd7cnp2vx3iHyydUcFP2nzXkD9TjYIKmcxnubc4ZaxIqbazO2XnQbowunB0KV6m9ju2PusdALn/bfZZsVjnrZTCCtPZ+8hyHqLinLMEajzQDbtG48hcr5Q/a44AxU55zM4uMefi4Xg13FtJQJ6Qh2o16IqxwAi5ri7mcsd5vVsNguyhp/co44fPdzZTur7aQxZ0wwW5DqioczO6Mq4dZfO/Aex5uhcO3VqOr5l6EpVih0RcrbL/R5ayHqSj2RwURhdqeFZWzx5s1i62ScDAlOh706s+gcC4npHHVSoshoRDB9Fjjw7qpdq8apkTH7M5LM75fnTNeUc74rSxn5kTjXFtyGLDHUAhE1HDHeCDhYGWYEr13nginBQPwIBcfWc5UsdcKLmyLYoVB3h192mR/GvRRnwE4y5n+3qbdcnErBSvaoxbOmNjJLO9cRKGsgWehylX7rmZdlU9LOdM2RtS7ClqiFg44IfbXtO6thQvvuBkgWd7auePuRqcN8Zi5faGsWaSlnIlAw9yOS1vQIIEjmDb7frkogwMOcNWGTPnNMGl7O8zknYsX/UA+76p2NpcGB/93WBslzugFn+QTzapMWsqZMPLW/sI9ae7l3ToOChxxq2UO0HfEXjXpegAMZX118aKFNwM2SvjAqzXqUvRohPi/tdkv4khLORPU64yoONxjHNyVsD7MbUU5rzd67Nr/eqU8+8UOp2Sf/VbsiN/CU0deYKsioVgQIs9RsUMpqNshLSshkRPmZR23tFF+L7bPJG/69hsqmKNaVkISIRxHPHCBvhHbk6CAwaSOw47x0JIkCscBDfRzU76frdnTuSNcPqRBDEISLRyjDfWSKUdzMCV6o+edQagcF2hPmOzf4UAyJByn8R405bsMMCU6ZneO+8bQf5nyfXSnzdznawhJhXAcxtQQL8fszpioNurnefCMEB53wJ3bvDpOMiEch7NqGHNgotpOU54+MOw7DPCOgHMqSjyEdpmHjmRROA6X1YZ07IPpAzETGqJwmJ8GU21g1gAnpI1QMt6wiZcF4r1niJLhbTQfcfxCkkQuyFwghJDZLOAuIITCIYTCIYTCIYTCIYTCIYRQOIRQOIRQOIRQOIRQOISQWvi/AAMA9UczDEaG0p8AAAAASUVORK5CYII=</property> </customStringProperty> </customProperties> - <customConfigProperties> - <customBooleanProperty> - <name>sigparser.isEnabled</name> - <description>Whether the webservice sigparser, for mail signature parsing is useable or not.</description> - </customBooleanProperty> - <customBooleanProperty> - <name>abbyy.ocr.isEnabled</name> - <description>Whether the webservice abbyy ocr, is useable or not.</description> - </customBooleanProperty> - <customStringProperty> - <name>abbyy.ocr.appId</name> - <description>The application id for the webservice abbyy ocr.</description> - </customStringProperty> - <customPasswordProperty> - <name>abbyy.ocr.password</name> - <description>The password for the webservice abbyy ocr.</description> - </customPasswordProperty> - <customPasswordProperty> - <name>sigparser.apiKey</name> - <description>The api key to authenticate at the mail signature webservice sigparser.</description> - </customPasswordProperty> - <customStringProperty> - <name>sigparser.apiUrl</name> - <description>The url to the mail signature webservice sigparser.</description> - </customStringProperty> - <customBooleanProperty> - <name>dataCaching.client.forceDisable</name> - <description>Enabling this option will disable the per-client-context data-cache within the customzing (for exameple the caching of Keywords). This is usefull if you're testing and want to frequently add data like keywords, etc. which are cached which help of the "DataCaching_lib".</description> - </customBooleanProperty> - </customConfigProperties> </preferences> diff --git a/process/ChecklistEntryRegistry_basic/ChecklistEntryRegistry_basic.aod b/process/ChecklistEntryRegistry_basic/ChecklistEntryRegistry_basic.aod new file mode 100644 index 0000000000000000000000000000000000000000..1bd98ef5996a85478b69dc6e07876c46439aec7c --- /dev/null +++ b/process/ChecklistEntryRegistry_basic/ChecklistEntryRegistry_basic.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>ChecklistEntryRegistry_basic</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/ChecklistEntryRegistry_basic/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js new file mode 100644 index 0000000000000000000000000000000000000000..d95e132e9d51ab5497e510d19b032ba92921d027 --- /dev/null +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -0,0 +1,406 @@ +import("Keyword_lib"); +import("system.logging"); +import("system.eMath"); +import("system.datetime"); +import("system.translate"); +import("system.entities"); +import("system.project"); +import("KeywordRegistry_basic"); +import("Sql_lib"); + + +/** + * Returns the matching rows, to the defined parameters. + * + * @param {String} pUid <p> + * The uid of the corresponding data set. + * @param {String} pEntity <p> + * The entity from which the data shall be loaded. + * @param {Array} pFields <p> + * The fields which shall be loaded, if null all fields in requested entity will be loaded. + * @param {Array} pParameters <p> + * The parameters which are necessary to loading the rows. + * @param {String} pProvider <p> + * An provider for loading the rows. + */ +function _getRows(pUid, pEntity, pFields, pParameters, pProvider){ + + var config = entities.createConfigForLoadingRows() + .entity(pEntity) + .ignorePermissions(true) + .fields(pFields); + + if (pProvider) + { + config.provider(pProvider); + } + if (pUid) + { + config.uid(pUid); + } + + if (pParameters) + { + for (let i = 0; i < pParameters.length; i++) + { + if (pParameters[i][0] && pParameters[i][1] && pParameters[i][0] != "" && pParameters[i][1] != "") + { + config.addParameter(pParameters[i][0], pParameters[i][1]); + } + } + } + + return entities.getRows(config); +} + +/** + * Provides a central place where all checklist entries with type 'AUTO' are defined. + * All defined entries has to return a object of type "ChecklistEntry". + * <p> + * This object has an attribute named: <u><b><i>verifierFn</i></u></b>. This attribute is a function, which + * expects the uid/object-rowid as param and is, how the name implies, responsible for + * verifying, whether the checklist entry is fulfilled or not. + * + * @class + * + * @example + * $ChecklistEntryRegistry.salesprojectRoleProjManager() + */ +function $ChecklistEntryRegistry(){} + +/* + * Returns you a list of all existing entries as object <br> + * <i><u>(key: functionname & value: title)</u></i><br> + * <p> + * E.g.: used in a dropDownProcess to provide a<br> + * selection of all possible entries.<br> + * + */ +$ChecklistEntryRegistry.getEntryList = function(){ + var rawList = Object.keys($ChecklistEntryRegistry); + var returnableList = {}; + + rawList.forEach(function(pEntry){ + if (!(pEntry == 'getEntryList')) + { + returnableList[pEntry] = $ChecklistEntryRegistry[pEntry]().title; + } + }); + + return returnableList; +} + +/* + * Checks whether the project team role: "Project manager"<br> + * is filled for the given salesproject. + * + */ +$ChecklistEntryRegistry.salesprojectRoleProjManager = function(){ + return{ + title: translate.text("Project team: \"Project manager\""), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["SALESPROJECTID", "MST_TEAM_ID", "PROJECTCODE"], null, "NoPhaseRequirementLoading"); + var memberRows = _getRows(null, "Member_entity", ["MEMBERROLE"], [["EnableMSTeams_param", spRows[0]["MST_TEAM_ID"]], ["ObjectRowId_param", spRows[0]["SALESPROJECTID"]]], "WithDistrictResponsibles"); + for (let i = 0; i < memberRows.length; i++) + { + if(memberRows[i]["MEMBERROLE"] == $KeywordRegistry.memberRoleProjManag()) + { + return true; + } + } + return false; + } + }; +} + +/* + * Checks whether a touchpoint for the<br> + * given salesproject, exists. + * + */ +$ChecklistEntryRegistry.salesprojectTouchpoint = function(){ + return{ + title: translate.text("Touchpoint"), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["SALESPROJECTID", "MST_TEAM_ID", "PROJECTCODE"], null, "NoPhaseRequirementLoading"); + var touchpintRows = _getRows(null, "SalesprojectSource_entity", ["SALESPROJECT_TOUCHPOINTID"], [["SalesprojectId_param", pSalesprojectId]], "SalesprojectSouces"); + if(touchpintRows.length > 0) + { + return true; + } + return false; + } + }; +} + +/* + * Checks whether the volume for the<br> + * given salesproject, is entered. + * + */ +$ChecklistEntryRegistry.salesprojectVolume = function(){ + return{ + title: translate.text("Volume"), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["VOLUME"], null, "NoPhaseRequirementLoading"); + if(spRows[0]["VOLUME"] && spRows[0]["VOLUME"] != "") + { + return true; + } + return false; + } + }; +} + +/* + * Checks whether an project start for the<br> + * given salesproject, exists. + * + */ +$ChecklistEntryRegistry.salesprojectProjStart = function(){ + return{ + title: translate.text("Project start"), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["STARTDATE"], null, "NoPhaseRequirementLoading"); + if(spRows[0]["STARTDATE"] && spRows[0]["STARTDATE"] != "") + { + return true; + } + return false; + } + }; +} + +/* + * Checks whether all classifications fields for the<br> + * given salesproject are filled. + * + */ +$ChecklistEntryRegistry.salesprojectClassificationFields = function(){ + return{ + title: translate.text("Classification fields"), + verifierFn: function(pSalesprojectId){ + var res = false; + var classificationRows = _getRows(null, "Classification_entity", ["VALUE"], [["ObjectType_param", "Salesproject"], ["ObjectRowid_param", pSalesprojectId]], "Classifications"); + if(classificationRows.length > 0) + { + res = true + for (let i = 0; i < classificationRows.length; i++) { + if(classificationRows[i] == "" || classificationRows[i] == null || classificationRows[i] == undefined) + { + res = false; + break; + } + } + } + return res; + } + }; +} + +/* + * Checks whether the project team role: "Internal Distribution"<br> + * for the given salesproject, exists. + * + */ +$ChecklistEntryRegistry.salesprojectRoleIntDist = function(){ + return{ + title: translate.text("Project team: \"Internal distribution\""), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["SALESPROJECTID", "MST_TEAM_ID", "PROJECTCODE"], null, "NoPhaseRequirementLoading"); + var memberRows = _getRows(null, "Member_entity", ["MEMBERROLE"], [["EnableMSTeams_param", spRows[0]["MST_TEAM_ID"]], ["ObjectRowId_param", spRows[0]["SALESPROJECTID"]]], "WithDistrictResponsibles"); + for (let i = 0; i < memberRows.length; i++) + { + if(memberRows[i]["MEMBERROLE"] == $KeywordRegistry.memberRoleIntenDistrib()) + { + return true; + } + } + return false; + } + }; +} + +/* + * Checks whether all project team role<br> + * for the given salesproject, assigned. + * + */ +$ChecklistEntryRegistry.salesprojectTeamRoles = function(){ + return{ + title: translate.text("Project team roles"), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["SALESPROJECTID", "MST_TEAM_ID", "PROJECTCODE"], null, "NoPhaseRequirementLoading"); + var memberRows = _getRows(null, "Member_entity", ["MEMBERROLE"], [["EnableMSTeams_param", spRows[0]["MST_TEAM_ID"]], ["ObjectRowId_param", spRows[0]["SALESPROJECTID"]]], "WithDistrictResponsibles"); + var allMemberRoles = newSelect(SqlBuilder.caseWhen(newWhere("AB_KEYWORD_ENTRY.KEYID", "MEMROLEDISTRICTRESPONSIBLE")).thenString("70cbad1b-eac6-4369-ba50-4946e0fbcb3a").elseValue("AB_KEYWORD_ENTRY.KEYID")) + .from("AB_KEYWORD_ENTRY") + .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.MemberRole())) + .arrayColumn(); + for (let i = 0; i < memberRows.length; i++) + { + for (let j = 0; j < allMemberRoles.length; j++) { + if(memberRows[i]["MEMBERROLE"] == allMemberRoles[j]) + { + allMemberRoles.splice(j, 1); + } + } + } + if(allMemberRoles.length == 0) + { + return true; + } + else + { + return false; + } + } + }; +} + +/* + * Checks whether an offer<br> + * for the given salesproject, exists. + * + */ +$ChecklistEntryRegistry.salesprojectOfferExists = function(){ + return{ + title: translate.text("Offer exists"), + verifierFn: function(pSalesprojectId){ + + var offerRows = _getRows(null, "Offer_entity", ["OFFERID"], [["ObjectRowId_param", pSalesprojectId], ["ObjectType_param", "Salesproject"]], "Links"); + if(offerRows.length > 0) + { + return true; + } + return false; + } + }; +} + +/* + * Checks whether the project start for the<br> + * given salesproject, is in the next 12 months. + * + */ +$ChecklistEntryRegistry.salesprojectProjStart12 = function(){ + return{ + title: translate.text("Project start within next 12 months"), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["STARTDATE"], null, "NoPhaseRequirementLoading"); + + for (let i = 0; i < spRows.length; i++) + { + var startdate = spRows[i]["STARTDATE"]; + if(startdate != null && startdate != "" && startdate != undefined) + { + var todayUnformatted = datetime.today(); + var today = datetime.toDate(todayUnformatted, "dd.MM.yyyy") + var currentYear = today.slice(today.length-4, today.length) + var nextYear = eMath.addInt(parseInt(currentYear),1); + var todayNextYear = datetime.toLong(today.slice(0, -4) + nextYear, "dd.MM.yyyy") + + return (parseInt(todayUnformatted) <= parseInt(startdate) && parseInt(startdate) <= parseInt(todayNextYear)) ? true : false; + } + } + return false; + } + }; +} + +/* + * Checks whether the offer for the<br> + * given salesproject, is marked as sent. + * + */ +$ChecklistEntryRegistry.salesprojectOfferSent = function(){ + return{ + title: translate.text("Offer sent"), + verifierFn: function(pSalesprojectId){ + + var offerRows = _getRows(null, "Offer_entity", ["STATUS"], [["ObjectRowId_param", pSalesprojectId], ["ObjectType_param", "Salesproject"]], "Links"); + var res = false; + + for (let i = 0; i < offerRows.length; i++) + { + if(offerRows[i].STATUS == $KeywordRegistry.offerStatus$sent()) + { + res = true; + break; + } + } + return res; + } + }; +} + +/* + * Checks whether the project probability for the<br> + * given salesproject, equals 100%. + * + */ +$ChecklistEntryRegistry.salesprojectProb100 = function(){ + return{ + title: translate.text("Probablity: 100%"), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["PROBABILITY"], null, "NoPhaseRequirementLoading"); + if(spRows[0]["PROBABILITY"] && spRows[0]["PROBABILITY"] == "SALPROJPROB100") + { + return true; + } + return false; + } + }; +} + +/* + * Checks whether the project status for the<br> + * given salesproject, is won. + * + */ +$ChecklistEntryRegistry.salesprojectStatusWon = function(){ + return{ + title: translate.text("Status: \"won\""), + verifierFn: function(pSalesprojectId){ + + var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["STATUS"], null, "NoPhaseRequirementLoading"); + if(spRows[0]["STATUS"] && (spRows[0]["STATUS"] == $KeywordRegistry.salesprojectState$partialOrder() || + spRows[0]["STATUS"] == $KeywordRegistry.salesprojectState$order())) + { + return true; + } + return false; + } + }; +} + +/* + * Checks whether a contract for the<br> + * offer to the given salesproject, exists. + * + */ +$ChecklistEntryRegistry.salesprojectContractExists = function(){ + return{ + title: translate.text("Contract"), + verifierFn: function(pSalesprojectId){ + + var offerRows = _getRows(null, "Offer_entity", ["OFFERID"], [["ObjectRowId_param", pSalesprojectId], ["ObjectType_param", "Salesproject"]], "Links"); + for (let i = 0; i < offerRows.length; i++) + { + var documentRows = _getRows(null, "Document_entity", ["BINDATA_UPLOAD"], [["AssignmentRowId_param", offerRows[i]["OFFERID"]], ["AssignmentTable_param", "OFFER"]], "Documents"); + if(documentRows.length>0) + { + return true; + } + } + return false; + } + }; +} diff --git a/process/ChecklistRegistry_basic/ChecklistEntryRegistry_basic.aod b/process/ChecklistRegistry_basic/ChecklistEntryRegistry_basic.aod new file mode 100644 index 0000000000000000000000000000000000000000..7d1fe5ffb3be6f886dded34e84d8e0e4ef230cba --- /dev/null +++ b/process/ChecklistRegistry_basic/ChecklistEntryRegistry_basic.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1"> + <name>ChecklistEntryRegistry_basic</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/ChecklistEntryRegistry_basic/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/Communication_lib/process.js b/process/Communication_lib/process.js index 055813cf362081fd583c1d8d2cd33fb0b4c0c4c4..f9e30868d8e9c816f642e8a383504605b2ba4990 100644 --- a/process/Communication_lib/process.js +++ b/process/Communication_lib/process.js @@ -31,11 +31,11 @@ CommUtil.getMediumIdsByCategory = function (pCategory) var keywordAttr = new KeywordAttribute($KeywordRegistry.communicationMedium(), "category"); //TODO: use getRows() via JDito var mediumIds = newSelect("AB_KEYWORD_ENTRY.KEYID") - .from("AB_KEYWORD_ATTRIBUTERELATION") - .join("AB_KEYWORD_ENTRY", "AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID = AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID") - .where("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID", keywordAttr.id) - .and("AB_KEYWORD_ATTRIBUTERELATION." + keywordAttr.dbField, pCategory) - .arrayColumn(); + .from("AB_KEYWORD_ATTRIBUTERELATION") + .join("AB_KEYWORD_ENTRY", "AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID = AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID") + .where("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID", keywordAttr.id) + .and("AB_KEYWORD_ATTRIBUTERELATION." + keywordAttr.dbField, pCategory) + .arrayColumn(); return mediumIds; }; @@ -73,19 +73,19 @@ CommUtil.setStandardForCategory = function(pAffectedRowId, pNewStandardCommId, p //set current standard comm-record as non-standard var cond = newWhere("ISSTANDARD = 1") - .and("COMMUNICATION.CONTACT_ID", pAffectedRowId) - .and("COMMUNICATION.MEDIUM_ID", mediumIds, SqlBuilder.IN()); + .and("COMMUNICATION.CONTACT_ID", pAffectedRowId) + .and("COMMUNICATION.MEDIUM_ID", mediumIds, SqlBuilder.IN()); - statements.push(["COMMUNICATION", cols, null, ["0"], cond.build()]); + statements.push(["COMMUNICATION", cols, null, ["0"], cond.build()]); //pNewStandardCommId can be an empty string if the standard has to only be removed if (pNewStandardCommId != "") { //set the new standard comm-record cond = newWhere("COMMUNICATION.COMMUNICATIONID", pNewStandardCommId) - //check communicationid, contactId and medium to prevent data-inconsistency when bad function params are passed by (e.g communicationid of a different category) - .and("COMMUNICATION.CONTACT_ID", pAffectedRowId) - .and("COMMUNICATION.MEDIUM_ID", mediumIds, SqlBuilder.IN()); + //check communicationid, contactId and medium to prevent data-inconsistency when bad function params are passed by (e.g communicationid of a different category) + .and("COMMUNICATION.CONTACT_ID", pAffectedRowId) + .and("COMMUNICATION.MEDIUM_ID", mediumIds, SqlBuilder.IN()); statements.push(["COMMUNICATION", cols, null, ["1"], cond.build()]); } @@ -148,8 +148,8 @@ CommUtil.getStandardSubSqlForCategory = function(pCategory, pContactField) return "''"; var selectStandardAddr = newSelect("max(COMMUNICATION.ADDR)") - .from("COMMUNICATION") - .where(); + .from("COMMUNICATION") + .where(); if (pContactField == undefined) selectStandardAddr.and("COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID"); @@ -215,6 +215,41 @@ CommUtil.getStandardMail = function (pContactId) return db.cell(query); } +/** + * Returns a sub sql-string (without brackets) for getting the address of a COMMUNICATION.<br> + * + * @param {String} pMediumKey <p> + * Key of the keyword "COMMUNICATION.MEDIUM".<br> + * (custom.category; e.g. "PHONE")<br> + * @param {String|Object} pContactField=CONTACT.CONTACTID (optional) <p> + * SQL-fieldname that shall be used for filtering the CONTACT_ID, <br> + * this can be a string(fieldname) or an SqlBuilder object.<br> + * @return {String} <p> + * Sub-sql.<br> + */ +CommUtil.getMediumAddrSubSqlByKey = function(pMediumKey, pContactField) +{ + var selectAddr = newSelect("max(COMMUNICATION.ADDR)") + .from("COMMUNICATION") + .where(); + + if (pContactField == undefined) + selectAddr.and("COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID"); + else if (typeof(pContactField) == "string") + selectAddr.and("COMMUNICATION.CONTACT_ID", pContactField); + else if (typeof(pContactField) == "object") + { + //you may want to sepcify a concrete value + selectAddr.and(pContactField); + } + else + return "''"; + + selectAddr.andIfSet("COMMUNICATION.MEDIUM_ID", pMediumKey); + + return selectAddr.toString(); +} + /** * Provides static methods for validation of communication data.<br> * <b>Do not create an instance of this!</b> diff --git a/process/EwsClientSync_lib/EwsClientSync_lib.aod b/process/EwsClientSync_lib/EwsClientSync_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..a53260007b9ecc486117433576e3c03b8723ff43 --- /dev/null +++ b/process/EwsClientSync_lib/EwsClientSync_lib.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>EwsClientSync_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/EwsClientSync_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/EwsClientSync_lib/process.js b/process/EwsClientSync_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..2366e6b5af77b5ba73399379f2f2d2c14fe88c1b --- /dev/null +++ b/process/EwsClientSync_lib/process.js @@ -0,0 +1,357 @@ +import("system.neon"); +import("Util_lib"); +import("system.translate"); +import("Communication_lib"); +import("Placeholder_lib"); +import("system.SQLTYPES"); +import("system.vars"); +import("system.datetime"); +import("system.util"); +import("system.tools"); +import("system.favorite"); +import("system.logging"); +import("Sql_lib"); +import("system.db"); +import("system.entities") + +/** + * Provides methods for handling and interacting with the EWS Plugin + * + * @class + */ +function EwsClientSyncUtils() {} + +/* + * Constant which contains the ewsSync Tag + * if the tag has to be changed a constant is the better way + */ +EwsClientSyncUtils.EWSSYNCTAG = function(){ + return "ewssync"; +} + +/* + * prepares the synctable, insert new entries and mark for deletion + * + */ +EwsClientSyncUtils.prepareContactSyncTable = function(){ + + var favoriteDataArray = EwsClientSyncUtils.getEwsFavorites(); + var ewsSyncData = newSelect("SYNCCONTACTID, ASYS_FAVORITEID, USER_ID, CONTACT_ID") + .from("ab_synccontact") + .table(); + + var dataIndex = { + index: new Map(), + add: function (pA, pB) + { + var idxMap = this.index; + if (!idxMap.has(pA)) + idxMap.set(pA, new Set()); + idxMap.get(pA).add(pB); + }, + has: function (pA, pB) + { + return this.index.has(pA) && this.index.get(pA).has(pB); + } + }; + + //preparing the value for inserting in ewsSync Table + var toInsertFavs = []; + for (let i = 0, l = ewsSyncData.length; i < l; i++) + { + //3 - contactID 2 userID + dataIndex.add(ewsSyncData[i][3], ewsSyncData[i][2]); + } + ​ + //we want to insert those which aren't in the sync table yet but which are tagged for sync + toInsertFavs = favoriteDataArray.filter(function (row) { + return !dataIndex.has(row[1], row[2]); + }); + + + //preparing values for updating entrys in the ewsSync Table + dataIndex.index.clear(); + + var toUpdate = []; + + for (let i = 0, l = favoriteDataArray.length; i < l; i++) + { + dataIndex.add(favoriteDataArray[i][1], favoriteDataArray[i][2]); + } + + ​//dataset which are in the synctable but aren't tagged for sync (favorites ewssync) has to be updated for deletion + toUpdate = ewsSyncData.filter(function (row){ + ​ + return !dataIndex.has(row[3], row[2]); + } + ​); + + + let statements = []; + let toInsert = []; + let cols = ["SYNCCONTACTID", "ASYS_FAVORITEID", "CONTACT_ID", "USER_ID"]; + let vals = []; + let table = "AB_SYNCCONTACT"; + let updStatements = []; + + for(let i = 0; i < toInsertFavs.length; i++) + { + vals = []; + vals = [util.getNewUUID(), toInsertFavs[i][0], toInsertFavs[i][1], toInsertFavs[i][2]] + + statements.push([table, cols, null, vals]); + } + for(let i = 0; i < toUpdate.length; i++) + { + updStatements.push([table, ["DATE_DEL"], null, [vars.get("$sys.date")], "ASYS_FAVORITEID = '" + toUpdate[i][1] + "'" ]); + } + + try{ + let count = db.inserts(statements, "Data_alias"); + let updCount = db.updates(updStatements, "Data_alias"); + } + catch(exc){ + logging.log(exc) + } +} + +/* + * get the contact which are marked with the ewssync favorite Tag + * + * @return [Array] favorite Data [[]] + */ +EwsClientSyncUtils.getEwsFavorites = function(){ + + + //get Favorites which are tagged with the Sync Tag + // var conf = favorite.createGetFavoritesConfig(); + // conf.setFavoriteGroupTitle(EwsClientSyncUtils.EWSSYNCTAG()); + // conf.setObjectType("Person"); + // + // var favoriteData = favorite.getFavorites(conf); + // var favoriteDataArray = []; + // + // for (var temp in favoriteData) + // { + // let favId = favoriteData[temp]["id"]; + // let rowId = favoriteData[temp]["rowid"]; + // let userID = favoriteData[temp]["group"]["groupuser"]; + // + // favoriteDataArray.push([favId, rowId, userID]); + // } + + + //in the current version it isn't possible to call the favorite API within a Serverprocess this will be implemented in the next RC + + var favoriteDataArray = new SqlBuilder("_____SYSTEMALIAS") + .selectDistinct("ASYS_RECORD.ID, ASYS_RECORD.ROW_ID, ASYS_RECORDGROUP.USER_ID") + .from("ASYS_RECORD") + .join("ASYS_RECORDGROUP", "ASYS_RECORDGROUP.ID = ASYS_RECORD.RECORDGROUP_ID") + .where("ASYS_RECORD.OBJECT_TYPE", "Person") + .and("ASYS_RECORDGROUP.TITLE", EwsClientSyncUtils.EWSSYNCTAG(), "LOWER(#) = ?") + .groupBy("ASYS_RECORDGROUP.USER_ID, ASYS_RECORD.ROW_ID, ASYS_RECORD.ID") + .table(); + + return favoriteDataArray; +} + +/* + * sets the editdate for the entrys in the synctable, in reason to get synced with exchange + * + * @param {String} pTableName + * @param {String} pDataSetID req + * @param {String} pDate req + * + * @return {void} + + */ +EwsClientSyncUtils.setContactToSync = function(pTableName, pDataSetID, pDate){ + + var affectedTables = ["ORGANISATION" , "PERSON", "CONTACT", "ADDRESS", "COMMUNICATION"]; + var affectedIDs = []; + + if (affectedTables.indexOf(pTableName) != -1) + { + switch(pTableName) + { + case "ORGANISATION": + affectedIDs = newSelect("CONTACT.CONTACTID").from("CONTACT").where("CONTACT.ORGANISATION_ID", pDataSetID).arrayColumn(); + break; + case "PERSON": + affectedIDs = newSelect("CONTACT.CONTACTID").from("CONTACT").where("CONTACT.PERSON_ID", pDataSetID).arrayColumn(); + break; + case "CONTACT": + affectedIDs = [pDataSetID]; + break; + case "ADDRESS": + affectedIDs = newSelect("ADDRESS.CONTACT_ID").from("ADDRESS") + .where("ADDRESS.ADDRESSID", pDataSetID) + .union(newSelect("CONTACT.CONTACT_ID").from("CONTACT").where("CONTACT.ADDRESS_ID", pDataSetID)).arrayColumn(); + break; + case "COMMUNICATION": + affectedIDs = newSelect("COMMUNICATION.CONTACT_ID").from("COMMUNICATION").where("COMMUNICATION.COMMUNICATIONID", pDataSetID).arrayColumn(); + break; + } + + if (affectedIDs.length > 0) + { + var upd = db.updateData("AB_SYNCCONTACT", ["DATE_EDIT"], null, [pDate], + "EXCHANGEID is not null and CONTACT_ID in ('" + affectedIDs.join("','") + "')"); + } + } +} + + +/* + * prepare Placholder for Exchange contacts + * + * @param {String} pUserId + */ +EwsClientSyncUtils.getPlaceholders = function(pUserId){ + var ewsPlaceholders = []; + + //EWS Sync Placeholder + //See EWS API Doc for other placeholder + //new Placeholder that has to be synced probably has also to be added in addDataToValueObjects() in the serverprocess + _addSqlPart("CONTACTID", "CONTACT.CONTACTID"); + _addSqlPart("EXCHANGEID", "select EXCHANGEID from ab_synccontact where Ab_synccontact.contact_id = contact.contactid and user_id = '"+ pUserId +"'", null, null) + + _addSqlPart("Givenname", "PERSON.FIRSTNAME"); + _addSqlPart("Surname", "PERSON.LASTNAME"); + _addSqlPart("Department", "CONTACT.DEPARTMENT"); + _addSqlPart("JobTitle", "CONTACT.CONTACTROLE"); + _addSqlPart("CompanyName", "ORGANISATION.NAME"); + + + _addAddressFormat("Business_street", "{street} {buildingno}"); + _addAddressFormat("Business_postalcode", "{zip}"); + _addAddressFormat("Business_city", "{city}"); + _addAddressFormat("Business_state", "{district}"); + _addAddressFormat("Business_countryorregion", "{country}"); + + _addSqlPart("EmailAddress1", CommUtil.getStandardSubSqlMail()); + + _addSqlPart("BusinessPhone", CommUtil.getStandardSubSqlPhone()); + _addSqlPart("BusinessHomepage", CommUtil.getMediumAddrSubSqlByKey("COMMINTERNET")); + + _addSqlPart("OtherFax", CommUtil.getMediumAddrSubSqlByKey("COMMFAX")); + _addSqlPart("MobilePhone", CommUtil.getMediumAddrSubSqlByKey("COMMMOBIL")); + _addSqlPart("FileAsMapping","case when PERSON_ID is not null then 'SurnameCommaGivenName' else 'Company' end" , null, null); + + + // _addSqlPart("HomePhone", "''"); + // _addSqlPart("HomeFax", "''"); + // _addSqlPart("EmailAddress2", "''"); + + + + return ewsPlaceholders; + + function _addSqlPart (pName, pSqlPart, pTarget, pTitle) + { + ewsPlaceholders.push(new Placeholder(pName, Placeholder.types.SQLPART, "(" + pSqlPart + ")", pTarget, pTitle)); + } + /** + * add an address format placeholder to placeholders + */ + function _addAddressFormat (pName, pFormat, pTarget, pTitle) + { + ewsPlaceholders.push(new Placeholder(pName, Placeholder.types.ADDRESSFORMAT, pFormat, pTarget, pTitle)); + } +} + +/* + * removes Person favorites with the EWS Tag + * + * @param {Array} pToDelete contains contact_ids for which the favorite should be removed + * @param {String} pUserId - User for which the favorites should be removed + * + * @return {Boolean} true if successfull + * + */ +EwsClientSyncUtils.removeFromFavorite = function(pToDelete, pUserId ){ + + //maybe in a future version there will be a way to remove favorites on a better way + + //all ews related Favorites for the user + var config = favorite.createGetFavoritesConfig() + .setFavoriteGroupTitle(EwsClientSyncUtils.EWSSYNCTAG()) + .setGroupType(favorite.FAVORITE_GROUP).setObjectType("Person") + .setUserId(pUserId); + + var ewsFavorite = favorite.getFavorites(config); + var favsToDelete = []; + + var dataIndex = { + index: new Map(), + add: function (pA) + { + var idxMap = this.index; + if (!idxMap.has(pA)) + idxMap.set(pA, new Set()); + }, + has: function (pA) + { + return this.index.has(pA); + } + }; + + for each(let row in pToDelete) + { + dataIndex.add(row) + } + + // delete those which are in the selection and are also in ewsFavorite + for each (let row in ewsFavorite) + { + if(dataIndex.has(row["rowid"])) + favsToDelete.push(row["id"]); + } + + var delConfig = favorite.createRemoveMultipleByIdConfig().setFavoriteRecordIds(favsToDelete); + + return favorite.remove(delConfig); +} + +/* + * Add contacts to favorites as ewssync group + * + * @param {Array} pToInsert Array with contactIds which should be added to the sync + */ +EwsClientSyncUtils.addToEwsFavorite = function(pToInsert){ + var userID = tools.getCurrentUser()[tools.NAME] + + var config = favorite.createAddFavoriteConfig(); + config.setFavoriteGroupTitle(EwsClientSyncUtils.EWSSYNCTAG()); + config.setObjectType("Person"); + config.setUserId(userID); + config.setGroupType(favorite.FAVORITE_GROUP) + + for(let i = 0, l = pToInsert.length; i < l; i++){ + config.setRowId(pToInsert[i]); + favorite.add(config); + } +} + +/** + * Opens a context to add or remove contacts from the ewssync<br> + * + * @param {String[]} pContactIds Contacts that should be added.<br> + * @param {String|Object} pFilter the filter for the contacts that should be used if no contact is selected + * @param {String} pMode the mode which should be used ("ADD" or "REMOVE") default ADD + */ +EwsClientSyncUtils.openEwsSyncAddContactView = function(pContactIds, pFilter, pMode) +{ + if (!Utils.isString(pContactIds)) + pContactIds = JSON.stringify(pContactIds); + if (!Utils.isString(pFilter)) + pFilter = JSON.stringify(pFilter); + + var params = { + "ContactIds_param": pContactIds, + "ContactFilter_param": pFilter, + "Mode_param": pMode + } + neon.openContext("EwsSyncAddContacts", "EwsSyncAddContactsEdit_view", null, neon.OPERATINGSTATE_VIEW, params); +} + \ No newline at end of file diff --git a/process/EwsClient_lib/process.js b/process/EwsClient_lib/process.js index 2de3addde44d76ac3ad80c4f264e837fc6d90e45..51dd088565b42911b3354abcf3b823cf6c1152f1 100644 --- a/process/EwsClient_lib/process.js +++ b/process/EwsClient_lib/process.js @@ -62,7 +62,10 @@ $EwsClientTaskDescriptions.GET_CONTACTS_BY_FOLDERS = function(){retur $EwsClientTaskDescriptions.GET_CONTACTSDEFAULTFOLDER = function(){return "GET_CONTACTSDEFAULTFOLDER"}; $EwsClientTaskDescriptions.GET_CONTACTFOLDERS = function(){return "GET_CONTACTFOLDERS"}; $EwsClientTaskDescriptions.UPDATE_CONTACT = function(){return "UPDATE_CONTACT"}; - +$EwsClientTaskDescriptions.INSERT_CONTACT_LIST_TO_FOLDER = function(){return "INSERT_CONTACT_LIST_TO_FOLDER"}; +$EwsClientTaskDescriptions.INSERT_CONTACT_LIST = function(){return "INSERT_CONTACT_LIST"}; +$EwsClientTaskDescriptions.UPDATE_CONTACT_LIST = function(){return "UPDATE_CONTACT_LIST"}; +$EwsClientTaskDescriptions.DELETE_CONTACT_LIST_BY_IDS = function(){return "DELETE_CONTACT_LIST_BY_IDS"}; function $EwsClientImpersonationModes(){} /** * Impersonation mode NONE should be set if no impersonation user is used and every user is authenticated per user-data @@ -400,4 +403,394 @@ EwsClientCalendarPermissionUtils._getCalendarPermissionFromResult = function (pP + "there exists a write but no read permission"); return retVal; +} + + + +/* + * provides static methods for the use of the exchange Contact Sync + * @class + */ +function EwsSyncContactUtils(){} + +EwsSyncContactUtils.getEwsSyncTag = function(){ + return "ewssync"; +} + + +/* + * returns the contact Folder for the passed mailbox + * requires the EWSClientPlugin + * + * @param {String} pAliasName name of the exchange alias + * @param {String} pMailbox mailbox of which the folder should be read + * + * @return {Array} array with maps [["id"], ["name"]] + */ +EwsSyncContactUtils.getContactFolders = function(pAliasName, pMailbox){ + + let taskDescription = $EwsClientTaskDescriptions.GET_CONTACTFOLDERS(); + + let task = <mailbox>{ + pMailbox + }</mailbox>; + + let pluginInput = EwsClientXMLUtils.getRequestXMLforAlias(taskDescription, task, $EwsClientImpersonationModes.SINGLE(), pAliasName); + let xmlOutput = EwsClientUtils.callPlugin(pluginInput); + let retVal = []; + + for each (folder in xmlOutput.folders.folder) + { + let map = {}; + map["id"] = folder.id; + map["name"] = folder.name; + retVal.push(map); + } + return retVal; +} + + +EwsSyncContactUtils.updateContacts = function(pAliasName, pMailbox, pObjects, doDebug ){ + let taskDescription = $EwsClientTaskDescriptions.UPDATE_CONTACT_LIST(); + + let tasks = <mailbox>{ + pMailbox + } + </mailbox>; + + let contactsXml = <contacts/> + + for each(let [pUniqueId, pData, pAddresses] in pObjects) + { + if(pUniqueId) + contactsXml.appendChild(EwsSyncContactXMLUtils.mapContactToXML(pData, pAddresses, pUniqueId, true)); + } + tasks += contactsXml; + + let pluginInput = EwsClientXMLUtils.getRequestXMLforAlias(taskDescription, tasks, $EwsClientImpersonationModes.SINGLE(), pAliasName); + + let xmlOutput = EwsClientUtils.callPlugin(pluginInput); + + return EwsSyncContactUtils.proceedPluginXmlOutput(xmlOutput, 2, doDebug); +} + + +/** + * Adds a contact in a specific folder + * requires EWSClientPlugin + * + * @param {String} pAliasName name of the Alias which contains connectiondata + * @param {String} pMailbox owner of the contact + * @param {String} pUniqueId defines folder + * @param {[[dataArray, adressArray]]} pObjects + * @param {boolean} doDebug + * + * @return {String} new unique ID of the contact (ExchangeID) + * + * pData array with maps with following structure: + * ["key"] + * ["value"] + * + * pAddresses array with following Maps + * ["addressKey"] + * ["value"] -> array with Maps with following structure ["key"] + * ["value] + * + * existing Key for a exchange Contact: + * title, givenname, middlename, surname + * jobtitle, officelocation, department, companyname, manager, assistentname, businesshomepage + * fileasmapping + * messagebody, categories + * id, changekey, lastmodifiedtime, datetimecreated (read only) + * + * - possible phone numbers: + * AssistantPhone, BusinessFax, BusinessPhone, BusinessPhone2, Callback, CarPhone, CompanyMainPhone, HomeFax, HomePhone, + * HomePhone2, Isdn, MobilePhone, OtherFax, OtherTelephone, Pager, PrimaryPhone, RadioPhone, Telex, TtyTddPhone + * + * - possible Mailing: + * EmailAddress1, EmailAddress2, EmailAddress3 + * + * - possible Instant Messaging: + * ImAddress1, ImAddress2, ImAddress3 + * + * - possible Adressen: + * Business, Home, Other + * - possible values of a adress: + * street, postalcode, city, state, countryorregion + * + * postaladdressindex + * - possible value for "postaladdressindex" + * None, Business, Home, Other + */ +EwsSyncContactUtils.insertContactsToFolder = function(pAliasName, pMailbox, pUniqueId, pObjects, doDebug) +{ + + let taskDescription = $EwsClientTaskDescriptions.INSERT_CONTACT_LIST_TO_FOLDER(); + + let task = <uniqueId>{ + pUniqueId + }</uniqueId> + + task += <mailbox>{ + pMailbox + }</mailbox> + + let contactsXml = <contacts/> + + for each(let [pData, pAddresses] in pObjects) + { + contactsXml.appendChild(EwsSyncContactXMLUtils.mapContactToXML(pData, pAddresses)); + } + task += contactsXml; + + let pluginInput = EwsClientXMLUtils.getRequestXMLforAlias(taskDescription, task, $EwsClientImpersonationModes.SINGLE(), pAliasName); + let xmlOutput = EwsClientUtils.callPlugin(pluginInput); + + return EwsSyncContactUtils.proceedPluginXmlOutput(xmlOutput, 1, doDebug); +} + +/** + * deletes unique Contacts out of EWS + * Voraussetzung ist EWSClientPlugin + * + * @param {String} pAliasName Name des Alias aus dem die Verbindungsdaten ausgelesen werden können + * @param {String} pUniqueIds Definiert Die Kontakte die + * @param {String} pMailBox opt falls angegen wird der ImpersonatedUser verwendet + * @param {boolean} doDebug + * + * @return {String[]} Array with results for Structure see Example + * @example + * Structure of the result from plugin + * [ + * [exchangeIdsWithNoError, n], + * [[id, "Error", "errorMsg", "Type"], [idn, "Error", "errorMsg", "Type"] ] + * ] + */ +EwsSyncContactUtils.deleteContactByID = function(pAliasName, pUniqueIds, pMailBox, doDebug) +{ + let taskDescription = $EwsClientTaskDescriptions.DELETE_CONTACT_LIST_BY_IDS(); + + let task = <uniqueIds/>; + + for each(let pUniqueId in pUniqueIds) + { + if(pUniqueId) + task.appendChild(<uniqueId>{ + pUniqueId + }</uniqueId>) + } + + let pluginInput; + + if ( pMailBox == undefined ) + { + pluginInput = EwsClientXMLUtils.getRequestXMLforAlias(taskDescription, task, $EwsClientImpersonationModes.NONE(), pAliasName); + } + else + { + task += <mailbox>{ + pMailBox + }</mailbox>; + pluginInput = EwsClientXMLUtils.getRequestXMLforAlias(taskDescription, task, $EwsClientImpersonationModes.SINGLE(), pAliasName); + } + + var xmlOutput = EwsClientUtils.callPlugin(pluginInput); + + return EwsSyncContactUtils.proceedPluginXmlOutput(xmlOutput, 3, doDebug); +} + +/* + * proceeds the plugin outputXMl and returns contactId and ExchangeID, + * + * @param {XML} pXmlOutput output of the plugin call + * @param {int} pMode controlls proceeding 1 - insert, 2 - update, 3 - delete + * @param {boolean} doDebug + * + * @return {Array} 2d Array with contactIds, unigueID(ExchangeID) and ErrorArray + * + */ +EwsSyncContactUtils.proceedPluginXmlOutput = function(pXmlOutput, pMode, doDebug){ + + var contactRes = []; + var failedIds = []; + var status, uniqueId, resultMessage, resultCode; + + //insert and Update + if(pMode < 3) + { + //for every contactResult in the contactResults list + for each( contactResult in pXmlOutput.contactResults.contactResult ) + { + var keyValues = contactResult.contact.keyValues.keyValue; + var contactid = ""; + + for each( keyValue in keyValues ) + { + if(keyValue.key.toString() == "CONTACTID")//we only need the contactid value + { + contactid = keyValue.value.toString(); + break; + } + } + + status = contactResult.result.toString(); + resultMessage = contactResult.resultMessage.toString(); + + //during update the xml structure is slightly different + uniqueId = (Number(pMode) == 2) ? contactResult.contact.@uniqueId.toString() : contactResult.uniqueId.toString(); + + if(status == "Success" && contactid != "" && uniqueId != "")//only if the action was successfull + { + if(pMode == 2)//update + contactRes.push(uniqueId); + else + contactRes.push([contactid, uniqueId]);//push for update/insert in AB_SYNCCONTACT + } + else + { + resultCode = contactResult.resultCode.toString(); + failedIds.push([contactid, status, resultMessage, resultCode, contactResult.contact.toString()]) + } + } + if(doDebug) logging.log("failedIds: " + failedIds.toSource()); + }//pMode < 3 + else + //the delete result xml differs from insert and update + if (pMode == 3) + { + for each( contactResult in pXmlOutput.resultBundles.resultBundle ) + { + //keyvalues + status = contactResult.result.toString(); + uniqueId = contactResult.uniqueId.toString(); + + if(status == "Success" && uniqueId != "") + { + contactRes.push(uniqueId);//push for deleting in AB_SYNCCONTACT + } + else + { + //get Keyvalues + resultMessage = contactResult.resultMessage.toString(); + resultCode = contactResult.resultCode.toString(); + + failedIds.push([uniqueId, status, resultMessage, resultCode]); + } + } + } + + return [contactRes, failedIds]; +} + +/* + *Class for handling ews XML + * + * @class + */ +function EwsSyncContactXMLUtils(){} + + +EwsSyncContactXMLUtils.mapContactToXML = function( pData, pAddresses, pExchangeId, isUpdate) +{ + var content = <contact> + <keyValues/> + <physicalAddresses/> + </contact>; + + if(isUpdate) + { + content = <contact uniqueId={ + pExchangeId + }> + <keyValues/> + <physicalAddresses/> + </contact>; + } + + //add contactData e.g. Name,Lastname, department etc. + for each (let map in pData) + { + let keyXml = <keyValue/> + let mapKey = map["key"]; + let mapVal = map["value"]; + + keyXml.appendChild(<key>{ + mapKey + }</key>); + keyXml.appendChild(<value>{ + mapVal + }</value>); + + //append contactdata to parent xml + content.keyValues.appendChild(keyXml); + } + + //TODO: refactor when for of Loop is available + for each( let outerMap in pAddresses ) + { + var adressXml = <physicalAddresse/> + var pAdressKey = outerMap["addressKey"]; + + adressXml.appendChild(<addressKey>{ + pAdressKey + }</addressKey>) + + var list = outerMap["value"]; + + adressXml.appendChild(<keyValues/>) + + for each( let innerMap in list ) + { + let keyXml = <keyValue/> + let innerMapKey = innerMap["key"]; + let innerMapValue = innerMap["value"]; + + + keyXml.appendChild(<key>{ + innerMapKey + }</key>); + keyXml.appendChild(<value>{ + innerMapValue + }</value>); + + adressXml.keyValues.appendChild(keyXml); + } + //append adressxml to parent + content.physicalAddresses.appendChild(adressXml); + } + return content; + } + +EwsSyncContactXMLUtils.mapContactFromXML = function( pContactXML ) +{ + let retVal = {}; + let shallow = []; + + for each (keyValue in pContactXML.keyValues.keyValue) + { + let map = {}; + map["key"] = keyValue.key; + map["value"] = keyValue.value; + shallow.push(map); + } + retVal["shallow"] = shallow; + + let addresses = []; + for each (physicalAddresse in pContactXML.physicalAddresses.physicalAddresse) + { + + let outerMap = {}; + outerMap["addressKey"] = physicalAddresse.addressKey; + let list = []; + for each(keyValue in physicalAddresse.keyValues) + { + let innerMap = {}; + innerMap["key"] = keyValue.key; + outerMap["value"] = keyValue.value; + list.push(innerMap); + } + outerMap["value"] = list; + } + retVal["addresses"] = addresses; + return retVal; } \ No newline at end of file diff --git a/process/Favorites_lib/process.js b/process/Favorites_lib/process.js index d5e32f5145cb4d324f5f47e69cfe2de852b52ca9..a02f3dfcc2146f31e6936f51870c92120f0f427c 100644 --- a/process/Favorites_lib/process.js +++ b/process/Favorites_lib/process.js @@ -30,30 +30,56 @@ FavoritesUtil.getUserFavoriteGroups = function() return Array.from(allTypes); } +/** + * Here we prepare the filtercondition for favorites of a certain pObjecttype, pOperator and pRowvalue. + * In certain circumstances, the rowids need to be prepared earlier (Person / Organisation). If so, they can be inserted by pPreparedRowIds. + * Then they won't be loaded again inside this method. + */ +FavoritesUtil.getFilterDisplayCondition = function(pObjecttype, pOperator, pRawvalue, pIdColumn, pPreparedRowIds) +{ + var favoFilterCond = newWhere(); + + if(pPreparedRowIds == null || pPreparedRowIds.length == 0) + pPreparedRowIds = FavoritesUtil.getRowIdsOfFavorites(pObjecttype, pOperator, pRawvalue); + if(pOperator == "1" || pOperator == "2" || pOperator == "11") // equal / not equal / not empty -> compare on result values + { + for(i = 0; i < pPreparedRowIds.length; i++) + favoFilterCond.or(pIdColumn, pPreparedRowIds[i], SqlBuilder.EQUAL()); + } + else if(pOperator == "12") // empty + favoFilterCond.and(pIdColumn, pPreparedRowIds, SqlBuilder.NOT_IN()); -FavoritesUtil.getRowIdsOfFavoriteGroup = function() + return favoFilterCond.toString(); +} +/** + * Gets all favorized datasetids by a given pObjecttype, pOperator and the Favoritegroup-Title it is stored with + */ +FavoritesUtil.getRowIdsOfFavorites = function(pObjecttype, pOperator, pRawvalue) { var sysAlias = favorite.getFavoritesAlias(); + var op = ""; - var value = vars.get("$local.rawvalue"); - var operator = vars.get("$local.operator") //noch zu implementieren + if(pOperator == "1") + op = SqlBuilder.EQUAL(); + else if(pOperator == "2") + op = SqlBuilder.NOT_EQUAL(); + else if(pOperator == "11") + op = SqlBuilder.IN(); + else if(pOperator == "12") + op = SqlBuilder.NOT_IN(); - if(value && operator) - { - var filterCond = newWhere("ASYS_RECORDGROUP.TITLE", value, null, null, sysAlias); //Operators fehlen noch - filterCond.and(newWhere("ASYS_RECORDGROUP.USER_ID", tools.getCurrentUser()["name"], null, null, sysAlias)); - - var rowIds = new SqlBuilder(sysAlias).selectDistinct("ASYS_RECORD.ROW_ID") - .from("ASYS_RECORD") - .join("ASYS_RECORDGROUP", "ASYS_RECORD.RECORDGROUP_ID = ASYS_RECORDGROUP.ID") - .where(filterCond) - .arrayColumn(); - - return rowIds; - } - - return null; + var filterCond = newWhereIfSet("ASYS_RECORDGROUP.TITLE", pRawvalue, op, null, sysAlias); //Operators fehlen noch + filterCond.and(newWhere("ASYS_RECORDGROUP.USER_ID", tools.getCurrentUser()["name"], null, null, sysAlias)); + filterCond.and(newWhere("ASYS_RECORD.OBJECT_TYPE", pObjecttype, null, null, sysAlias)); + + var rowIds = new SqlBuilder(sysAlias).selectDistinct("ASYS_RECORD.ROW_ID") + .from("ASYS_RECORD") + .join("ASYS_RECORDGROUP", "ASYS_RECORD.RECORDGROUP_ID = ASYS_RECORDGROUP.ID") + .where(filterCond) + .arrayColumn(); + + return rowIds; } FavoritesUtil.getUserFavoriteGroupsByContext = function(pContext) diff --git a/process/KeywordData_lib/KeywordData_lib.aod b/process/KeywordData_lib/KeywordData_lib.aod index 6955ec39f1f168d9c31fb731c2d6aa16fd02b00c..75431a8c0314bbe8ce20a2362be8e1dd40c6cc96 100644 --- a/process/KeywordData_lib/KeywordData_lib.aod +++ b/process/KeywordData_lib/KeywordData_lib.aod @@ -3,6 +3,7 @@ <name>KeywordData_lib</name> <majorModelMode>DISTRIBUTED</majorModelMode> <process>%aditoprj%/process/KeywordData_lib/process.js</process> + <alias>Data_alias</alias> <variants> <element>LIBRARY</element> </variants> diff --git a/process/KeywordData_lib/process.js b/process/KeywordData_lib/process.js index a4fbd6bd4e44b0b1068e110f60e27107bceb47ee..a367023d23685e3bd9590be36b5e0e793de93298 100644 --- a/process/KeywordData_lib/process.js +++ b/process/KeywordData_lib/process.js @@ -1,30 +1,32 @@ -import("system.translate"); +import("Keyword_lib"); import("system.db"); +import("system.translate"); import("DataCaching_lib"); import("Sql_lib"); -/* -This is a experimental library. -The code will definetly change in the future while not keeping the same functionparameters and calls. You should not use this except you excatly know what you're doing. -Since the functions will change, comments are written for the future functions. - -The idea behind this is to maintain data in cached form (client-context-side)) for various keyword-constructs. +/** + * This is an experimental library. + * The code will definitely change in the future while not keeping the same function parameters and calls. You should not use this except you exactly know what you're doing. + * Since the functions will change, comments are written for the future functions. + * + * The idea behind this is to maintain data in cached form (client-context-side)) for various keyword-constructs. */ -function KeywordData(){} +function KeywordData() {} -KeywordData.getSimpleData = function (pKeywordContainer, pLocale, pOnlyActives) +KeywordData.getSimpleData = function(pKeywordContainer, pLocale, pOnlyActives) { - var onlyActives = (pOnlyActives == undefined ? true : pOnlyActives); + var onlyActives = pOnlyActives == undefined ? true : pOnlyActives; var flags = "#" + (onlyActives ? "1" : "0"); var identifier = "KeywordSimpleData_" + pKeywordContainer + flags; var cache = new CachedData(identifier, true, pLocale); - return cache.load(function (pTranslationNecessary, pLocale){ + + return cache.load(function(pTranslationNecessary, pLocale) { var keywordEntrySelect = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE", "Data_alias") .from("AB_KEYWORD_ENTRY") .orderBy("AB_KEYWORD_ENTRY.SORTING asc, AB_KEYWORD_ENTRY.TITLE asc") - .where("AB_KEYWORD_ENTRY.CONTAINER", pKeywordContainer); - + .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName(pKeywordContainer)); + if (onlyActives) keywordEntrySelect.and("AB_KEYWORD_ENTRY.ISACTIVE", "1"); @@ -34,36 +36,67 @@ KeywordData.getSimpleData = function (pKeywordContainer, pLocale, pOnlyActives) { keywordData[i][1] = translate.text(keywordData[i][1], pLocale); } + return keywordData.slice(0); }); }; +KeywordData.getSimpleData2 = function(pKeywordContainer, pLocale, pOnlyActives) +{ + var onlyActives = pOnlyActives == undefined ? true : pOnlyActives; + var flags = "#" + (onlyActives ? "1" : "0"); + var identifier = "KeywordSimpleData_" + pKeywordContainer + flags; + var cache = new CachedData(identifier, true, pLocale); + + return cache.load(function(pTranslationNecessary, pLocale) { + var keywordEntrySelect = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE", "Data_alias") + .from("AB_KEYWORD_ENTRY") + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .orderBy("AB_KEYWORD_ENTRY.SORTING asc, AB_KEYWORD_ENTRY.TITLE asc") + .where("AB_KEYWORD_CATEGORY.NAME", pKeywordContainer); + + if (onlyActives) + keywordEntrySelect.and("AB_KEYWORD_ENTRY.ISACTIVE", "1"); + + var keywordData = keywordEntrySelect.table(); -KeywordData.getKeyIdMap = function (pKeywordContainer, pLocale) + for (var i = 0, l = keywordData.length; i < l; i++) + { + keywordData[i][1] = translate.text(keywordData[i][1], pLocale); + } + + return keywordData.slice(0); + }); +}; + +KeywordData.getKeyIdMap = function(pKeywordContainer, pLocale) { var cache = new CachedData("KeywordKeyidMap_" + pKeywordContainer, true, pLocale); - return cache.load(function (pTranslationNecessary, pLocale){ + + return cache.load(function(pTranslationNecessary, pLocale) { var keywordData = KeywordData.getSimpleData(pKeywordContainer, pLocale) var res = {}; var keyid, title; + for (var i = 0, l = keywordData.length; i < l; i++) { [keyid, title] = keywordData[i]; - res[keyid] = title;//title comes already translated through the getData-function + res[keyid] = title; // title comes already translated through the getData-function } + return res; }); }; -KeywordData.getKeywordAttributeRelations = function (pKeywordContainer) +KeywordData.getKeywordAttributeRelations = function(pKeywordContainer) { - return CachedData.make("KeywordAttributeRelationObj_" + pKeywordContainer, false, function(){ + return CachedData.make("KeywordAttributeRelationObj_" + pKeywordContainer, false, function() { var data = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ATTRIBUTE.NAME, AB_KEYWORD_ATTRIBUTE.KIND, \n\ AB_KEYWORD_ATTRIBUTERELATION.CHAR_VALUE, AB_KEYWORD_ATTRIBUTERELATION.LONG_CHAR_VALUE, AB_KEYWORD_ATTRIBUTERELATION.NUMBER_VALUE, AB_KEYWORD_ATTRIBUTERELATION.BOOL_VALUE") .from("AB_KEYWORD_ENTRY") - .join("AB_KEYWORD_ATTRIBUTE", "AB_KEYWORD_ATTRIBUTE.CONTAINER = AB_KEYWORD_ENTRY.CONTAINER") + .join("AB_KEYWORD_ATTRIBUTE", "AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID") .leftJoin("AB_KEYWORD_ATTRIBUTERELATION", newWhere("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID = AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID") .and("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID = AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID")) - .where("AB_KEYWORD_ENTRY.CONTAINER", pKeywordContainer) + .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName(pKeywordContainer)) .table(); var res = {}; @@ -73,11 +106,13 @@ KeywordData.getKeywordAttributeRelations = function (pKeywordContainer) { [keyId, name, type, charVal, longCharVal, numVal, boolVal] = data[i]; name = name.trim(); - type = type.trim(); + type = type.trim(); + if (res[keyId] == undefined) res[keyId] = {}; var parsedValue = null; + switch(type) { case "NUMBER_VALUE": @@ -98,16 +133,17 @@ KeywordData.getKeywordAttributeRelations = function (pKeywordContainer) } return res; }); - + return data; } -function LanguageData(){} +function LanguageData() {} LanguageData.getData = function() { var cache = new CachedData("LanguagesData", false); - return cache.load(function (pTranslationNecessary, pLocale){ + + return cache.load(function(pTranslationNecessary, pLocale) { var data = db.table("select AB_LANGUAGE.ISO3, AB_LANGUAGE.NAME_LATIN from AB_LANGUAGE"); return data; }); @@ -117,16 +153,19 @@ LanguageData.getIso3Map = function(pLocale, pAlias) { var dbAlias = pAlias || db.getCurrentAlias(); var cache = new CachedData("LanguagesISO3Map", true, pLocale, dbAlias); - var cachedData = cache.load(function (pTranslationNecessary, pLocale, pAlias){ + var cachedData = cache.load(function(pTranslationNecessary, pLocale, pAlias) { var data = db.table("select AB_LANGUAGE.ISO3, AB_LANGUAGE.ISO2, AB_LANGUAGE.NAME_LATIN from AB_LANGUAGE", pAlias); var res = {}; var iso3, iso2, countryName; + for (var i = 0, l = data.length; i < l; i++) { [iso3, iso2, countryName] = data[i]; res[iso3] = {name: translate.text(countryName, pLocale), iso2: iso2}; } + return res; }); + return cachedData; }; \ No newline at end of file diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index b17061f3aa65daa386e0e0735d07c850e0be8a89..3a514e016762cc93feda22a8be23e51c0899bbcd 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -82,11 +82,20 @@ $KeywordRegistry.ticketType$supportTicket = function(){return "SUPPORTTICKET";}; $KeywordRegistry.productPricelist = function(){return "ProductPricelist";}; $KeywordRegistry.productPricelist$standardList = function(){return "PRICELISTDEFAULT";}; +$KeywordRegistry.productPricelist$keyList = function(){return "PRICELISTKEY";}; +$KeywordRegistry.productPricelist$specialList = function(){return "PRICELISTSPECIAL";}; +$KeywordRegistry.productPricelist$serviceList = function(){return "PRICELISTSERVICE";}; $KeywordRegistry.quantityUnit = function(){return "QuantityUnit";}; $KeywordRegistry.quantityUnit$pieces = function(){return "QUANTITYPIECES";}; $KeywordRegistry.MemberRole = function(){return "MemberRole";}; +$KeywordRegistry.memberRoleProjManag = function(){return "MEMROLEPROJMANAG";}; +$KeywordRegistry.memberRoleAdvise = function(){return "MEMROLEADVISE";}; +$KeywordRegistry.memberRoleProjAssist = function(){return "MEMROLEPROJASSIST";}; +$KeywordRegistry.memberRoleExSalemang = function(){return "MEMROLEEXSALEMANAG";}; +$KeywordRegistry.memberRoleIntenDistrib = function(){return "MEMROLINSALEMANAG";}; + $KeywordRegistry.salesprojectSource = function(){return "SalesprojectSource";}; $KeywordRegistry.salesorderState = function(){return "SalesorderState";}; @@ -133,6 +142,12 @@ $KeywordRegistry.salesprojectState$lost = function(){return "SALPROJSTATLOST";}; $KeywordRegistry.salesprojectPhase = function(){return "SalesprojectPhase";}; $KeywordRegistry.salesprojectPhase$nqc = function(){return "SALPROJPHASENQC";}; $KeywordRegistry.salesprojectPhase$nego = function(){return "SALPROJPHASENEGO";}; +$KeywordRegistry.salesprojectPhase$mal = function(){return "SALPROJPHASEMAL"}; +$KeywordRegistry.salesprojectPhase$mql = function(){return "SALPROJPHASEMQL"}; +$KeywordRegistry.salesprojectPhase$offer = function(){return "SALPROJPHASEOFFER"}; +$KeywordRegistry.salesprojectPhase$sal = function(){return "SALPROJPHASESAL"}; +$KeywordRegistry.salesprojectPhase$sqo = function(){return "SALPROJPHASESQO"}; +$KeywordRegistry.salesprojectPhase$mqc = function(){return "SALPROJPHASEMQC"}; $KeywordRegistry.taskPriority = function(){return "TaskPriority";}; $KeywordRegistry.taskPriority$none = function(){return "TASKPRIONONE";}; @@ -328,3 +343,8 @@ $KeywordRegistry.notificationPriority$normal = function(){ return "NORMAL";}; $KeywordRegistry.notificationPriority$hight = function(){ return "HIGH";}; $KeywordRegistry.notificationPriority$max = function(){ return "MAX";}; +$KeywordRegistry.visitPlanEntryStatusAppointment$confirmed = function(){return "VISITSTATUSAPPOINTMENTCONFIRMED";};$KeywordRegistry.knowledgePublishLevel$public = function(){return "PUBLIC";} + +$KeywordRegistry.checklistEntryType = function(){return "ChecklistEntryType";} +$KeywordRegistry.checklistEntryType$manual = function(){return "MANUAL";} +$KeywordRegistry.checklistEntryType$auto = function(){return "AUTO";} \ No newline at end of file diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js index dd8986377eaaff95d792cc821b8be28b39634724..3f33564d881f46aa07e062522eb22d7a89dbbea8 100644 --- a/process/Keyword_lib/process.js +++ b/process/Keyword_lib/process.js @@ -1,10 +1,11 @@ -import("KeywordRegistry_basic"); -import("KeywordData_lib"); -import("system.vars"); -import("system.SQLTYPES"); +import("system.entities"); import("system.db"); -import("system.translate"); import("system.neon"); +import("system.SQLTYPES"); +import("system.translate"); +import("system.vars"); +import("KeywordData_lib"); +import("KeywordRegistry_basic"); import("Sql_lib"); /** @@ -12,14 +13,14 @@ import("Sql_lib"); * * @class */ -function KeywordUtils(){} +function KeywordUtils() {} /** -* resolves KEYIDs of a keywordentry into the specific title +* resolves KEYIDs of a KeywordEntry into the specific title * * @param {String} pContainerName name of the keyword container that shall be resolved * @param {String} pDbFieldName name fo the database field where the KEYID-value is stored -* @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shalle be translated +* @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shall be translated * * @return {String} a SQL-expression (case-when-statement) that resolves the KEYID into the title */ @@ -27,20 +28,23 @@ KeywordUtils.getResolvedTitleSqlPart = function(pContainerName, pDbFieldName, pL { var keywordData = KeywordData.getSimpleData(pContainerName, pLocale); var resSql = SqlUtils.getResolvingCaseWhen(keywordData, pDbFieldName, false); + return SqlUtils.translateStatementWithQuotes(resSql); }; /** * returns a specific name (translated) - this is normally the view-value - of a given keyword; - * <br/>if the key could not be found an empty string "" is returned + * <br/>if the key could not be found an empty string "" is returned* * @param {String} keywordContainer specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY" * @param {String} key id value of the keyword where the view-value shall be searched * @param {String} [locale=locale depending on current client/servercontext] Language-value for translations + * * @return {String} representation of the translated name of the keyword-key + * * @example * var histMedium; * histMedium = vars.get("$field.MEDIUM"); - * if (histMedium){ + * if (histMedium) { * result.string(vars.get("$field.SUBJECT") + " (" + LegacyKeywordUtils.getViewValue("ACTIVITY.MEDIUM", histMedium) + ")"); * } */ @@ -48,11 +52,10 @@ KeywordUtils.getViewValue = function(keywordContainer, key, locale) { if (!key) return ""; - + var data = KeywordData.getKeyIdMap(keywordContainer, locale); - if (data[key] == undefined) - return ""; - return data[key]; + + return data[key] == undefined ? "" : data[key]; }; /** @@ -68,12 +71,10 @@ KeywordUtils.getAttributeRelationsByKey = function(pKeyId, pContainerName) { if (!pKeyId) return ""; - + var data = KeywordData.getKeywordAttributeRelations(pContainerName); - if (data[pKeyId] == undefined) - return {}; - else - return data[pKeyId]; + + return data[pKeyId] == undefined ? {} : data[pKeyId]; }; /** @@ -90,10 +91,12 @@ KeywordUtils.getAttributeRelationsByKey = function(pKeyId, pContainerName) KeywordUtils.getAttributeRelation = function(pKeyId, pContainerName, pAttrName, pDefault) { var attributes = KeywordUtils.getAttributeRelationsByKey(pKeyId, pContainerName); + if (attributes && attributes[pAttrName] != null) { return attributes[pAttrName]; } + return pDefault !== undefined ? pDefault : null; }; @@ -105,16 +108,76 @@ KeywordUtils.getAttributeRelation = function(pKeyId, pContainerName, pAttrName, KeywordUtils.getContainerNames = function() { //do not cache this list since - // a) the list can easly change when a new container is created + // a) the list can easily change when a new container is created // b) where this is called it's not relevant in terms of performance - //!SqlBuilder - var list = db.array(db.COLUMN, "select distinct AB_KEYWORD_ENTRY.CONTAINER from AB_KEYWORD_ENTRY order by AB_KEYWORD_ENTRY.CONTAINER asc"); - return list; + return db.array(db.COLUMN, "select AB_KEYWORD_CATEGORY.NAME from AB_KEYWORD_CATEGORY order by AB_KEYWORD_CATEGORY.NAME asc"); +}; + +/** + * returns the category name (former "keyword container") of a KeywordCategory by the given UUID or an empty string if it does not exist + * + * @param {String} pCategoryId UUID of the KeywordCategory + * + * @return {String} category name as string + */ +KeywordUtils.getCategoryNameById = function(pCategoryId) +{ + let categoryName = ""; + + if(pCategoryId) { + let resultValue = newSelect("AB_KEYWORD_CATEGORY.NAME") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID", pCategoryId) + .cell(); + + if(resultValue) + categoryName = resultValue; + } + + return categoryName; +}; + + +/** + * returns the UUID of a KeywordCategory by the category name (fromer keyword container) or an empty string "" if it does not exist + * + * @param {String} pName name of the Keyword category (former "keyword container") + * + * @return {String} category UUID as string + */ +KeywordUtils.getCategoryIdByName = function(pName) +{ + var res = ""; + + if(pName) + { + var nameFilter = { + "type":"group", + "operator":"AND", + "childs":[{ + "type":"row", + "name":"NAME", + "operator":"EQUAL", + "value":pName, + "key":pName, + "contenttype":"TEXT" + }] + }; + var entityConfig = entities.createConfigForLoadingRows() + .entity("KeywordCategory_entity") + .fields(["#UID"]) + .filter(JSON.stringify(nameFilter)); + var entityRow = entities.getRows(entityConfig); + if (entityRow.length > 0) + res = entityRow[0]["#UID"]; + } + + return res; }; /** * provides a translated list of keyword-entry-titles in the system filtered by a containerName; -* usefull for lists where the key is the name which is then a editable displayValue +* useful for lists where the key is the name which is then a editable displayValue * * @param {String} pContainerName name of the keyword container for filtering * @param {String} [pLocale=locale depending on current client/servercontext] Language-value for translations @@ -124,19 +187,20 @@ KeywordUtils.getContainerNames = function() KeywordUtils.getEntryNamesByContainer = function(pContainerName, pLocale) { var data = KeywordData.getSimpleData(pContainerName, pLocale); - data = data.map(function (v){ + data = data.map(function(v) { return v[1]; }); + return data; }; /** * provides a translated list of keyword-entry-titles and its ids in the system filtered by a containerName; -* usefull for lists where the key is the name which is then a editable displayValue +* useful for lists where the key is the name which is then a editable displayValue * * @param {String} pContainerName name of the keyword container for filtering -* * @param {String} [pLocale=locale depending on current client/servercontext] Language-value for translations +* @param {String} [pLocale=locale depending on current client/servercontext] Language-value for translations * * @return {String[]} 2D-Array in the form of [[id1, translatedTitle1], [idN, translatedTitleN]] */ @@ -145,14 +209,16 @@ KeywordUtils.getEntryNamesAndIdsByContainer = function(pContainerName, pLocale) //TODO: this can be propably removed when the "Salesproject_entity.REASONS.dropDownProcess.js" is replaced by a consumer var list = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE") .from("AB_KEYWORD_ENTRY") - .where("AB_KEYWORD_ENTRY.CONTAINER", pContainerName) + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .where("AB_KEYWORD_CATEGORY.NAME", pContainerName) .orderBy("AB_KEYWORD_ENTRY.SORTING asc, AB_KEYWORD_ENTRY.TITLE asc") .table(); - - list = list.map(function (elem){ + + list = list.map(function(elem) { elem[1] = pLocale ? translate.text(elem[1], pLocale) : translate.text(elem[1]); return elem; }); + return list; }; @@ -168,27 +234,29 @@ KeywordUtils.getEntryNamesAndIdsByContainer = function(pContainerName, pLocale) KeywordUtils.exists = function(pKeyId, pContainerName) { //a check if a keyword exists should always be on the origin data and not the cache, so do not cache here - return parseInt( - newSelect("count(*)") - .from("AB_KEYWORD_ENTRY") - .where("AB_KEYWORD_ENTRY.KEYID", pKeyId) - .and("AB_KEYWORD_ENTRY.CONTAINER", pContainerName) - .cell(true, "0") - ) > 0; + var countValue = newSelect("count(*)") + .from("AB_KEYWORD_ENTRY") + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .where("AB_KEYWORD_ENTRY.KEYID", pKeyId) + .and("AB_KEYWORD_CATEGORY.NAME", pContainerName) + .cell(true, "0") +; + + return parseInt(countValue) > 0; }; /** * Get the first keyword Keyid from a container * * @param {String} pContainerName name of the keyword container that shall be resolved - * @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shalle be translated + * @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shall be translated * * @return {String} the keyid or "" */ KeywordUtils.getFirst = function(pContainerName, pLocale) { var keywordData = KeywordData.getSimpleData(pContainerName, pLocale); - + return (keywordData && keywordData.length > 0 ? keywordData[0][0] : ""); }; @@ -197,7 +265,8 @@ KeywordUtils.getFirst = function(pContainerName, pLocale) * * @param {String} pContainerName specifies the type of the keyword and therefore the list elements; * e.g. "COUNTRY"; use an entry of the $KeywordRegistry here - * @return translated name, if it exists in the switch case + * + * @return {String} translated name, if it exists in the switch case */ KeywordUtils.getTranslatedContainer = function(pContainerName) { @@ -207,19 +276,18 @@ KeywordUtils.getTranslatedContainer = function(pContainerName) return translate.text("Phase"); case "SalesprojectState": return translate.text("State"); - break; default: - return "Please add " + pContainerName + " to the switch case in Salesproject_lib"; + return "Please add '" + pContainerName + "' to the switch case in Salesproject_lib"; } } /** - * object that provides featrues for a single keyword attribute; initalizes itself on creation with a specific keyword-attribute + * object that provides features for a single keyword attribute; initializes itself on creation with a specific keyword-attribute * * @param {String} pContainerName specifies the type of the keyword and therefore the list elements; * e.g. "COUNTRY"; use an entry of the $KeywordRegistry here - * @param {String} pAttributeName the name of the keyword attribute that shall be initalized + * @param {String} pAttributeName the name of the keyword attribute that shall be initialized * @param {String} [pDefault=undefined] the default value -> Does not throw an error, if default value exists. * * @class @@ -232,11 +300,12 @@ function KeywordAttribute(pContainerName, pAttributeName, pDefault) var keywordAttrData = newSelect("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID, AB_KEYWORD_ATTRIBUTE.KIND") .from("AB_KEYWORD_ATTRIBUTE") - .where("AB_KEYWORD_ATTRIBUTE.CONTAINER", pContainerName) - .and("AB_KEYWORD_ATTRIBUTE.NAME", pAttributeName) + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .where("AB_KEYWORD_ATTRIBUTE.NAME", pAttributeName) + .and("AB_KEYWORD_CATEGORY.NAME", pContainerName) .arrayRow(); - - if (keywordAttrData.length > 0) + + if (keywordAttrData.length > 0) { this.id = keywordAttrData[0]; this.type = keywordAttrData[1]; @@ -259,22 +328,23 @@ function KeywordAttribute(pContainerName, pAttributeName, pDefault) */ KeywordAttribute.prototype.getValue = function(pKeyId) { - if (this.exists()) + if (this.exists()) { var attrValue = newSelect(this.dbField) .from("AB_KEYWORD_ENTRY") .join("AB_KEYWORD_ATTRIBUTERELATION", "AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID = AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID") - .where("AB_KEYWORD_ENTRY.CONTAINER", this.container) + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .where("AB_KEYWORD_ENTRY.KEYID", pKeyId) .and("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID", this.id) - .and("AB_KEYWORD_ENTRY.KEYID", pKeyId) + .and("AB_KEYWORD_CATEGORY.NAME", this.container) .cell(); if (attrValue) return attrValue; - + if (this.defaultValue) return this.defaultValue; - + throw new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword \"%1\" from container \"%2\"", [this.attribute, pKeyId, this.container])); } else if (this.defaultValue == undefined) @@ -286,21 +356,21 @@ KeywordAttribute.prototype.getValue = function(pKeyId) /** * get a SqlBuilder object for this keyword attribute. You can easily add additional conditions to it. * - * @return {SqlBuilder} a SqlBuilder which contains a select for the entry-id's, joins to entry and attribute - * and conditions for the container and the attribute-name. + * @return {SqlBuilder} a SqlBuilder which contains a select for the entry-id's, joins to entry and attribute and conditions for the container and the attribute-name. */ -KeywordAttribute.prototype.getSqlBuilderSelect = function() +KeywordAttribute.prototype.getSqlBuilderSelect = function() { return newSelect("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID") - .from("AB_KEYWORD_ATTRIBUTERELATION") - .join("AB_KEYWORD_ENTRY", "AB_KEYWORD_ENTRYID = AB_KEYWORD_ENTRY_ID", "attrEntry") - .join("AB_KEYWORD_ATTRIBUTE", "AB_KEYWORD_ATTRIBUTEID = AB_KEYWORD_ATTRIBUTE_ID") - .where(["AB_KEYWORD_ENTRY", "CONTAINER", "attrEntry"], this.container) - .and("AB_KEYWORD_ATTRIBUTE.NAME", this.attribute) + .from("AB_KEYWORD_ATTRIBUTERELATION") + .join("AB_KEYWORD_ATTRIBUTE", "AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID = AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID") + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID = AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID") + .where("AB_KEYWORD_CATEGORY.NAME", this.container) + .and("AB_KEYWORD_ATTRIBUTE.NAME", this.attribute) } /** * check if the Container can have the attribute. + * * @return {Boolean} true if it exists, false if not */ KeywordAttribute.prototype.exists = function() @@ -308,18 +378,19 @@ KeywordAttribute.prototype.exists = function() return this.id != undefined && this.type != undefined && this.dbField != undefined; } + /** - * provides methods for interactions with the sepcial-keywords "LANGUAGE" + * provides methods for interactions with the special-keywords "LANGUAGE" * * @class */ -function LanguageKeywordUtils(){} +function LanguageKeywordUtils() {} /** -* resolves Languagecode into the latin name +* resolves LanguageCode into the latin name * * @param {String} pDbFieldName name fo the database field where the ISO3-value is stored -* @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shalle be translated +* @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shall be translated * * @return {String} a SQL-expression (case-when-statement) */ @@ -343,19 +414,20 @@ LanguageKeywordUtils.getViewValue = function(key, locale) { if (!key) return ""; - + var languageMap = LanguageData.getIso3Map(locale); var languageInfo = languageMap[key]; + if (languageInfo == undefined) return ""; + var title = languageInfo.name; - if (title == undefined) - return ""; - return title; + + return title == undefined ? "" : title; }; /** - * deterines on server- and clientside the matching iso2-code to a iso3 by generating a map and then returning the matched result; + * determines on server- and clientside the matching iso2-code to a iso3 by generating a map and then returning the matched result; * on clientside the map is cached * * @param {String} key id value (iso3) of the language where the value shall be searched @@ -368,13 +440,15 @@ LanguageKeywordUtils.Iso2FromIso3 = function(key, pAlias) { if (!key) return ""; + //maybe this should be retrieved by a simple select on the serverside since LanguageData-methods are only cached on the client side var languageMap = LanguageData.getIso3Map(null, pAlias); var languageInfo = languageMap[key]; + if (languageInfo == undefined) return ""; + var res = languageInfo.iso2; - if (res == undefined) - return ""; - return res; + + return res == undefined ? "" : res; }; \ No newline at end of file diff --git a/process/Keyword_test/process.js b/process/Keyword_test/process.js index d1b1d910e9dfd985b8c089830f410b21f0151c25..dca6647a0cfd8add4855f4727934ce8c2e8baaac 100644 --- a/process/Keyword_test/process.js +++ b/process/Keyword_test/process.js @@ -1,143 +1,140 @@ +import("Sql_lib"); import("system.result"); import("system.translate"); import("system.vars"); import("Keyword_lib"); import("UnitTest_lib"); -//this test will not work currently -//TODO: renable and fix the tests - -//var getContainerNames = new TestSuite("KeywordUtils.getContainerNames", [ -// new Test("should return an alphabetically ascending ordered list of all keyword containers", -// function(pTester) { -// var actualValue = KeywordUtils.getContainerNames(); -// -// pTester.expectThat(actualValue).isArray().assert(); -// pTester.expectThat(actualValue).hasMinLength(1).assert(); -// pTester.expectThat(actualValue).elementAt(0).equals("ActivityCategory").assert(); -// pTester.expectThat(actualValue).elementAt(-1).equals("YesNo").assert(); -// } -// ) -//]); -// -// -//var getCategoryNameById = new TestSuite("KeywordUtils.getCategoryNameById", [ -// new Test("should return existing keyword category name for correct uuid", -// function(pTester) { -// var actualValue = KeywordUtils.getCategoryNameById("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b0"); -// -// pTester.expectThat(actualValue).equals("MemberRole").assert(); -// } -// ), -// -// new Test("should return non-existing keyword category name for wrong uuid", -// function(pTester) { -// var actualValue = KeywordUtils.getCategoryNameById("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b1"); -// -// pTester.expectThat(actualValue).equals("<unknown>").assert(); -// } -// ), -// -// new Test("should return non-existing keyword category name for missing uuid", -// function(pTester) { -// var actualValue = KeywordUtils.getCategoryNameById(); -// -// pTester.expectThat(actualValue).equals("<unknown>").assert(); -// } -// ), -//]); -// -// -//var getCategoryIdByName = new TestSuite("KeywordUtils.getCategoryIdByName", [ -// new Test("should return existing keyword uuid for correct category name", -// function(pTester) { -// var actualValue = KeywordUtils.getCategoryIdByName("MemberRole"); -// -// pTester.expectThat(actualValue).equals("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b0").assert(); -// } -// ), -// -// new Test("should throw exception for wrong keyword category name", -// function(pTester) { -// var exception = new Error(translate.withArguments("no keyword category \"%0\" found", ["AddressTypes"])); -// pTester.expectThat(function() { -// KeywordUtils.getCategoryIdByName("AddressTypes"); -// }).throwsException(exception).assert(); -// } -// ), -// -// new Test("should throw exception for missing keyword category name", -// function(pTester) { -// var exception = new Error(translate.withArguments("no keyword category \"%0\" found", [""])); -// pTester.expectThat(function() { -// KeywordUtils.getCategoryIdByName(); -// }).throwsException(exception).assert(); -// } -// ), -//]); -// -// -//var getEntryNamesAndIdsByContainer = new TestSuite("KeywordUtils.getEntryNamesAndIdsByContainer", [ -// new Test("should return an array of all keywords and their ID's for given container", -// function(pTester) { -// var actualValue = KeywordUtils.getEntryNamesAndIdsByContainer("ActivityDirection"); -// -// pTester.expectThat(actualValue).isArray().assert(); -// pTester.expectThat(actualValue).hasMinLength(1, {name: "array"}).assert(); -// pTester.expectThat(actualValue).elementAt(0).isArray().assert(); -// pTester.expectThat(actualValue).elementAt(0).hasLength(2).assert(); -// } -// ), -// -// new Test("should return an empty array for non-existent container", -// function(pTester) { -// var actualValue = KeywordUtils.getEntryNamesAndIdsByContainer("Asdf"); -// -// pTester.expectThat(actualValue).isArray().assert(); -// pTester.expectThat(actualValue).hasLength(0, {name: "array"}).assert(); -// } -// ), -//]); -// -// -//var exists = new TestSuite("KeywordUtils.exists", [ -// new Test("should return a boolean indicating that a known keyword in a known container exists", -// function(pTester) { -// var actualValue = KeywordUtils.exists("VISIT", "ActivityCategory"); -// -// pTester.expectThat(actualValue).isBoolean().assert(); -// pTester.expectThat(actualValue).equals(true, "known keyword exists in known container").assert(); -// } -// ), -// -// new Test("should return a boolean indicating that an unknown keyword in a known container does not exist", -// function(pTester) { -// var actualValue = KeywordUtils.exists("ASDF", "ActivityCategory"); -// -// pTester.expectThat(actualValue).isBoolean().assert(); -// pTester.expectThat(actualValue).equals(false, "unknown keyword does not exist in known container").assert(); -// } -// ), -// -// new Test("should return a boolean indicating that a known keyword in an unknown container does not exist", -// function(pTester) { -// var actualValue = KeywordUtils.exists("VISIT", "Asdf"); -// -// pTester.expectThat(actualValue).isBoolean().assert(); -// pTester.expectThat(actualValue).equals(false, "known keyword does not exist in unknown container").assert(); -// } -// ), -//]); -// -// -//var tester = new Tester("Test Keyword_lib"); -//tester.initCoverage(KeywordUtils); -//tester.test(getContainerNames); -//tester.test(getCategoryNameById); -//tester.test(getCategoryIdByName); -//tester.test(getEntryNamesAndIdsByContainer); -//tester.test(exists); -// -//tester.summary(); -// -//result.object(tester.getResults()); \ No newline at end of file +var getContainerNames = new TestSuite("KeywordUtils.getContainerNames", [ + new Test("should return an alphabetically ascending ordered list of all keyword containers", + function(pTester) { + var actualValue = KeywordUtils.getContainerNames(); + + pTester.expectThat(actualValue).isArray().assert(); + pTester.expectThat(actualValue).hasMinLength(1).assert(); + pTester.expectThat(actualValue).elementAt(0).equals("ADVISER_ROLE").assert(); + pTester.expectThat(actualValue).elementAt(-1).equals("YesNo").assert(); + } + ) +]); + + +var getCategoryNameById = new TestSuite("KeywordUtils.getCategoryNameById", [ + new Test("should return existing keyword category name for correct uuid", + function(pTester) { + var actualValue = KeywordUtils.getCategoryNameById( + newSelect("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.NAME", "MemberRole") + .cell() + ); + + pTester.expectThat(actualValue).equals("MemberRole").assert(); + } + ), + + new Test("should return non-existing keyword category name for wrong uuid", + function(pTester) { + var actualValue = KeywordUtils.getCategoryNameById("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b1"); + + pTester.expectThat(actualValue).equals("").assert(); + } + ), + + new Test("should return non-existing keyword category name for missing uuid", + function(pTester) { + var actualValue = KeywordUtils.getCategoryNameById(); + + pTester.expectThat(actualValue).equals("").assert(); + } + ), +]); + + +var getCategoryIdByName = new TestSuite("KeywordUtils.getCategoryIdByName", [ + new Test("should return existing keyword uuid for correct category name", + function(pTester) { + var actualValue = KeywordUtils.getCategoryIdByName("MemberRole"); + pTester.expectThat(actualValue).equals("b3765719-9d07-41c4-a813-18bc9056db1a").assert(); + } + ), + + new Test("should return empty string for wrong keyword category name", + function(pTester) { + var actualValue = KeywordUtils.getCategoryIdByName("XXXAddressTypesXXX"); + pTester.expectThat(actualValue).equals("").assert(); + } + ), + + new Test("should return empty string when not passing a keyword category name", + function(pTester) { + var actualValue = KeywordUtils.getCategoryIdByName(); + pTester.expectThat(actualValue).equals("").assert(); + } + ), + ]); + +var getEntryNamesAndIdsByContainer = new TestSuite("KeywordUtils.getEntryNamesAndIdsByContainer", [ + new Test("should return an array of all keywords and their ID's for given container", + function(pTester) { + var actualValue = KeywordUtils.getEntryNamesAndIdsByContainer("ActivityDirection"); + + pTester.expectThat(actualValue).isArray().assert(); + pTester.expectThat(actualValue).hasMinLength(1, {name: "array"}).assert(); + pTester.expectThat(actualValue).elementAt(0).isArray().assert(); + pTester.expectThat(actualValue).elementAt(0).hasLength(2).assert(); + } + ), + + new Test("should return an empty array for non-existent container", + function(pTester) { + var actualValue = KeywordUtils.getEntryNamesAndIdsByContainer("Asdf"); + + pTester.expectThat(actualValue).isArray().assert(); + pTester.expectThat(actualValue).hasLength(0, {name: "array"}).assert(); + } + ), +]); + + +var exists = new TestSuite("KeywordUtils.exists", [ + new Test("should return a boolean indicating that a known keyword in a known container exists", + function(pTester) { + var actualValue = KeywordUtils.exists("VISIT", "ActivityCategory"); + + pTester.expectThat(actualValue).isBoolean().assert(); + pTester.expectThat(actualValue).equals(true, "known keyword exists in known container").assert(); + } + ), + + new Test("should return a boolean indicating that an unknown keyword in a known container does not exist", + function(pTester) { + var actualValue = KeywordUtils.exists("ASDF", "ActivityCategory"); + + pTester.expectThat(actualValue).isBoolean().assert(); + pTester.expectThat(actualValue).equals(false, "unknown keyword does not exist in known container").assert(); + } + ), + + new Test("should return a boolean indicating that a known keyword in an unknown container does not exist", + function(pTester) { + var actualValue = KeywordUtils.exists("VISIT", "Asdf"); + + pTester.expectThat(actualValue).isBoolean().assert(); + pTester.expectThat(actualValue).equals(false, "known keyword does not exist in unknown container").assert(); + } + ), +]); + + +var tester = new Tester("Test Keyword_lib"); +tester.initCoverage(KeywordUtils); +tester.test(getContainerNames); +tester.test(getCategoryNameById); +tester.test(getCategoryIdByName); +tester.test(getEntryNamesAndIdsByContainer); +tester.test(exists); + +tester.summary(); + +result.object(tester.getResults()); diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js index 422506bef5bea01bb6500bd075ec70a66f6b172a..160ec05e7f053e8b13e1f67fac2e3942affafc9b 100644 --- a/process/Leadimport_lib/process.js +++ b/process/Leadimport_lib/process.js @@ -163,14 +163,15 @@ LeadImportUtils.importData = function(pDataFields, pDataTypes, pFieldDef, pField var orgObjID = ""; var orgsForDubCheck = ""; var persForDubCheck = ""; - var orgRet; + var orgAddressID = null; + var orgRet = [null, null, null, null]; var persRet; //------create organisation if (LeadValues["NAME"].trim() != "")//only if Organame is filled { orgObjID = "Organisation";//for attribute - orgRet = LeadImportUtils.insertOrg(pDataFields, pDataTypes, pFieldDef, pFieldValues, pUser, pDate); + [orgRet[0], orgRet[1], orgRet[2], orgRet[3], orgAddressID] = LeadImportUtils.insertOrg(pDataFields, pDataTypes, pFieldDef, pFieldValues, pUser, pDate); orgid = orgRet[0]; orgContactId = orgRet[1]; @@ -186,7 +187,7 @@ LeadImportUtils.importData = function(pDataFields, pDataTypes, pFieldDef, pField if (LeadValues["LASTNAME"].trim() != "")//only if lastname is filled { persObjID = "Person";//for attribute - persRet = LeadImportUtils.insertPers(pDataFields, pDataTypes, pFieldDef, pFieldValues, orgid, LeadValues, pUser, pDate); + persRet = LeadImportUtils.insertPers(pDataFields, pDataTypes, pFieldDef, pFieldValues, orgid, LeadValues, pUser, pDate, orgAddressID); persid = persRet[0]; persContactId = persRet[1]; @@ -574,11 +575,11 @@ LeadImportUtils.insertOrg = function(pDataFields, pDataTypes, pFieldDef, pField workflow.startProcessByKey("leadprocess", processVariables) } - return new Array(orgid, contactId ,entityFieldValues, true); + return new Array(orgid, contactId ,entityFieldValues, true, ContactValues["ADDRESS_ID"]); } //return the ids of the existing organisation so that people who work for the same organisation are assigned to them // OrgId ContactID - return new Array(ids[0], ids[1] ,entityFieldValues, false); + return new Array(ids[0], ids[1] ,entityFieldValues, false, ids[2]); } /** @@ -592,10 +593,11 @@ LeadImportUtils.insertOrg = function(pDataFields, pDataTypes, pFieldDef, pField * @param {Object} pLeadValues the LeadValues * @param {String} pUser the importuser * @param {String} pDate the importdate + * @param {String} pOrgAddressID the Address id of the Organisation * * @return {String []} (personId, contactId, duplicateMapping) */ -LeadImportUtils.insertPers = function(pDataFields, pDataTypes, pFieldDef, pFieldValues, pOrgId, pLeadValues, pUser, pDate) +LeadImportUtils.insertPers = function(pDataFields, pDataTypes, pFieldDef, pFieldValues, pOrgId, pLeadValues, pUser, pDate, pOrgAddressID) { var isoLanguage = pLeadValues["ISOLANGUAGE"]; @@ -611,7 +613,6 @@ LeadImportUtils.insertPers = function(pDataFields, pDataTypes, pFieldDef, pFiel ContactValues["STATUS"] = "CONTACTSTATACTIVE";//only insert active persons ContactValues["PERSON_ID"] = persid; - ContactValues["ADDRESS_ID"] = util.getNewUUID(); ContactValues["DEPARTMENT"] = ContactInfoUtils.getContactDepartment(pLeadValues); ContactValues["CONTACTROLE"] = ContactInfoUtils.getContactRole(pLeadValues); ContactValues["CONTACTPOSITION"] = ContactInfoUtils.getContactPosition(pLeadValues); @@ -624,14 +625,14 @@ LeadImportUtils.insertPers = function(pDataFields, pDataTypes, pFieldDef, pFiel else { ContactValues["ORGANISATION_ID"] = pOrgId; - ContactValues["ADDRESS_ID"] = 0 + ContactValues["ADDRESS_ID"] = pOrgAddressID } var contactId = LeadImportUtils.insertTable(pDataFields, pDataTypes, ContactValues, "CONTACT", pUser, pDate); //Address - if (ContactValues["ADDRESS_ID"]) + if (ContactValues["ADDRESS_ID"] && !ContactValues["ORGANISATION_ID"]) { var AddrValues = LeadImportUtils.setValues(pDataFields["ADDRESS"], pFieldDef, pFieldValues); AddrValues["ADDRESSID"] = ContactValues["ADDRESS_ID"]; @@ -954,7 +955,7 @@ LeadImportUtils.scanLeadDups = function(pAllContactData) LeadImportUtils.checkOrgDup = function(pLeadValues) { // search whether the organisation already exists - var query = newSelect("ORGANISATIONID, CONTACTID") + var query = newSelect(["ORGANISATIONID, CONTACTID, ADDRESSID"]) .from("ORGANISATION") .join("CONTACT", "ORGANISATIONID = CONTACT.ORGANISATION_ID") .join("ADDRESS", "ADDRESSID = ADDRESS_ID"); diff --git a/process/Liquibase_lib/process.js b/process/Liquibase_lib/process.js index e673139131bf77a542021c1aa60cf1a96aadd06a..dc12de6cc2530f6df82778c8644d4add36b1ad65 100644 --- a/process/Liquibase_lib/process.js +++ b/process/Liquibase_lib/process.js @@ -77,7 +77,7 @@ LiquiUtils.exportAllTablesAsLiquibaseFiles = function(pOutFolderPath, pAuthor, p */ LiquiUtils.exportTableAsLiquibaseFiles = function(pPath, pTableName, pColumns, pCondition, pAuthor, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn, pFileName) { - var resXml = LiquiUtils._getDataXml(pAuthor, pPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn); + var resXml = LiquiUtils.getDataXmlFromDB(pAuthor, pPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn); if (resXml == "") return {exported: false}; var fileName = pFileName || pTableName; @@ -108,17 +108,44 @@ LiquiUtils.exportTableAsLiquibaseFiles = function(pPath, pTableName, pColumns, p * * @return {String} the liquibase-changest in xml-form */ -LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn) +LiquiUtils.getDataXmlFromDB = function(pAuthor, pLobPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn) { + var alias = pAlias || db.getCurrentAlias(); + var dbData = db.table("select " + columns.join(", ") + " from " + pTableName + " " + (pCondition ? "where " + pCondition : ""), alias); + return LiquiUtils.getDataXml(pAuthor, pLobPath, pTableName, pColumns, dbData, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn); +} + +/** +* generates from a table a xml-changeset for liquibase; determines the correct liquibase-xml-attribute by db-column-type; +* if a value is empty it will not be added to the xml; will load the data at once (no paging); +* if the data contains a long CLOB-value that value has to and will be stored on the server-filesystem; +* if the data contains any BLOB-value that value has to and will be stored on the server-filesystem; +* +* @param {String} [pAuthor="autogenerated"] author that will be written into the changeset +* @param {String} [pLobPath=not set] file-path where lob files and folders will be created; the folder must be on the server; +* if you've no lob-fields you don't have to specify somehing here +* @param {String} pTableName name of the DB-table that will be exported; this is also the name of the file that is stored +* @param {Array} [pColumns=all columns within the table] db-columns within the table that will be exported +* @param {String} [pData=undefined] db-condition to limit the data that will be exported; if nothing given the whole content will be exported +* @param {Boolean} [pIncludeClearTableDirective=false] if true, a delete element is added at the beginning of the changeset for the table +* @param {String} [pAlias=current db-alias] alias where the data will be loaded from +* @param {Boolean} [pGenerateChangeSetIdFromArguments=false] if true the id of the changeset will be generated by the passed arguments to this function +* @param {function} [pBlobCallbackFn=undefined] function that returns the filename for a stored file (only for BLOB-databasetypes). <br/> +* if nothing is specified, the filename is generated automatically with a hash of the content <br/> +* The callback function retrieves all the arguments of the LiquiXTable.prototype.addBlobCol-function +* +* @return {String} the liquibase-changest in xml-form +*/ +LiquiUtils.getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pData, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn) +{ + if (!pData) + return ""; var author = pAuthor || "autogenerated"; var alias = pAlias || db.getCurrentAlias(); //cannot be added within jdito code to the XML-object, so instead add it as string var XML_HEADER_LINE = LiquiXmlUtils.xmlHeaderLineStr(); var columns = pColumns || db.getColumns(pTableName, alias); - var dbData = db.table("select " + columns.join(", ") + " from " + pTableName + " " + (pCondition ? "where " + pCondition : ""), alias); - if (dbData.length == 0) - return ""; var colTypes = db.getColumnTypes(pTableName, columns, alias);//needed to determine the correct liquibase function //every type has its function that accepts a columnName- and a value-parameter //so let's dertermine once the corresponding funtion to its type for faster access @@ -157,7 +184,7 @@ LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCond var changeLogXml = LiquiXmlUtils.databaseChangeLogWithChangeSet(author, changesetId); if (pIncludeClearTableDirective) changeLogXml.changeSet.appendChild(<delete tableName={pTableName}/>); - dbData.forEach(function(row) + pData.forEach(function(row) { var rowObj = {}; for (let i = 0; i < columnLen; i++) @@ -212,7 +239,7 @@ LiquiXmlUtils.databaseChangeLogWithChangeSet = function (pAuthor, pChangeSetId) LiquiXmlUtils.colValue = function (name, value, valueAttribute) { var DO_NOT_ADD_EMPTY_VALUES = true;//clob and blob will ignore this setting and always skip empty values - if (DO_NOT_ADD_EMPTY_VALUES && value == "") + if (DO_NOT_ADD_EMPTY_VALUES && value === "") return null; var x = <column {valueAttribute}={value}/>; x.@name = name; diff --git a/process/ewsSyncContacts_serverProcess/ewsSyncContacts_serverProcess.aod b/process/ewsSyncContacts_serverProcess/ewsSyncContacts_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..fbbe02fc2fff34c845acc1f03e22f34836da4ab6 --- /dev/null +++ b/process/ewsSyncContacts_serverProcess/ewsSyncContacts_serverProcess.aod @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>ewsSyncContacts_serverProcess</name> + <title>Sync Exchange Contacts</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/ewsSyncContacts_serverProcess/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/ewsSyncContacts_serverProcess/process.js b/process/ewsSyncContacts_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..fd420916d9172146ce5f60943ae629bf8578cd82 --- /dev/null +++ b/process/ewsSyncContacts_serverProcess/process.js @@ -0,0 +1,588 @@ +import("Util_lib"); +import("system.project"); +import("system.favorite"); +import("system.db"); +import("system.result"); +import("EwsClient_lib"); +import("system.text"); +import("Address_lib"); +import("Communication_lib"); +import("system.vars"); +import("Sql_lib"); +import("system.tools"); +import("system.logging"); +import("EwsClientSync_lib"); + +//inserting new Data in the asys_synccontact table and deleting those which aren't anymore in the favorite context +EwsClientSyncUtils.prepareContactSyncTable(); + +//start Sync with Exchange +var msg = runSync(); + +if(msg.length){ + result.string(msg.join("\n")); +} + +function runSync(){ + var doDebug = false; + var retMsg = []; + + var syncUser = newSelect("distinct USER_ID").from("AB_SYNCCONTACT").arrayColumn(); + + for (var i= 0 ; i < syncUser.length; i++) + { + var user = tools.getUserByAttribute(tools.NAME, [syncUser[i]], tools.PROFILE_DEFAULT); + if (user) + { + var mailBox = user[tools.PARAMS][tools.EXCHANGE_EMAIL]; + + if(!mailBox)//use the mail of the user as backup exchangeMail adress + mailBox = user[tools.PARAMS][tools.EMAIL]; + + + var exAlias = user[tools.PARAMS][tools.CALENDAR_ALIAS]; + + if (!exAlias) + exAlias = project.getInstanceConfigValue("calendarAlias", null); + + var login = user[tools.TITLE]; + var lastRunDate = user[tools.PARAMS]["lastEwsSyncContact"]; + var runDate = vars.get("$sys.date"); + user[tools.PARAMS]["lastEwsSyncContact"] = runDate; + + if (mailBox != "" && exAlias != "") + { + if(doDebug) logging.log("ContactSync for User: " + login + " started") + + let delContacts = EWSdeleteContactsForUser(syncUser[i], mailBox, exAlias, login, doDebug); + let updateContacts = EWSupdateContactsForUser(syncUser[i], mailBox, exAlias, lastRunDate, login, doDebug); + let insertContacts = EWSinsertContactsForUser(syncUser[i], mailBox, exAlias, runDate, login, doDebug); + + if(delContacts.length) + retMsg.push(delContacts); + if(updateContacts.length) + retMsg.push(updateContacts); + if(insertContacts.length) + retMsg.push(insertContacts); + + tools.updateUser(user); + + if(doDebug) logging.log("ContactSync for User: " + login + " completed") + } + else + { + retMsg.push(["No exchange configuration exists for user " + login]); + } + } + } + if(doDebug) logging.log("EWSContactSync completed"); + + return retMsg; +} + +/**************************************************************************************************/ + +/* + * deletes the Synced Contacts for the passed User + * + * @param {String} pUserID ID of the User for which Contact should be removed from sync + * @param {String} pMailBox Exchange Mail + * @param {String} pAlias name of the Exchange Alias + * @param {String} pUser Login of the User + * @param {boolean} doDebug + * +*/ +function EWSdeleteContactsForUser(pUserID, pMailBox, pAlias, pUser, doDebug) +{ + //delete all Entrys with a DATE_DEL tag, those were removed between the last import and yet + var cond = newWhere("AB_SYNCCONTACT.DATE_DEL is not null").and("AB_SYNCCONTACT.USER_ID", pUserID); + + var delContacts = newSelect("AB_SYNCCONTACT.EXCHANGEID") + .from("AB_SYNCCONTACT") + .where(cond) + .and("AB_SYNCCONTACT.EXCHANGEID is not null") + .arrayColumn(); + + var deletions = Utils.clone(delContacts); + + var exchangeids = []; + while(deletions.length > 0) + { + let deletionPart = deletions.splice(0, 200); + try{ + exchangeids = exchangeids.concat(EwsSyncContactUtils.deleteContactByID(pAlias, deletionPart, pMailBox, doDebug)); + } + catch(ex) + { + let errMsg = "Error while calling the plugin: " + logging.toLogString(ex.rhinoException != undefined ? ex.rhinoException : ex, true) + "\r\n"; + logging.log(errMsg); + return [errMsg]; + } + } + + var errorItems = []; + var notFoundItems = []; + var deletedItems = []; + + if(exchangeids.length > 0) + { + //no errors during deletion in Exchange + while (exchangeids[0].length > 0) + { + let exchangeidsPart = exchangeids[0].splice(0, 30);//max limit 30 + + cond.and("AB_SYNCCONTACT.EXCHANGEID", exchangeidsPart, SqlBuilder.IN()).deleteData(); + deletedItems = deletedItems.concat(exchangeidsPart); + } + + //exchange Entrys with errors for deleting + while (exchangeids[1].length > 0) + { + if(doDebug) logging.log("Exchange Entrys with Errors: " + exchangeids[1].length); + var deletes = []; + + let exchangeidsPart = exchangeids[1].splice(0, 30);//max limit 30 + + for (let i = 0; i < exchangeidsPart.length; i++) + { + if(exchangeidsPart[i][3] == "ErrorItemNotFound") + { + deletes.push(exchangeidsPart[i][0]); + notFoundItems.push(exchangeidsPart[i][0] , pUserID); + } + else + { + errorItems.push(exchangeidsPart[i][0] , pUserID); + } + } + + if(deletes.length > 0) + { + let affectedRows = cond.and("AB_SYNCCONTACT.EXCHANGEID", deletes, SqlBuilder.IN()).deleteData(); + if(doDebug) logging.log("Anzahl der gelöschten Einträge: " + affectedRows); + deletedItems = deletedItems.concat(deletes); + } + + //clearing the where condition and preset it to it's origin condition + cond.clearWhere(); + cond.where("AB_SYNCCONTACT.DATE_DEL is not null").and("AB_SYNCCONTACT.USER_ID", pUserID); + } + + if(doDebug && notFoundItems.length > 0) + logging.log("EWSSYnc not found items: " + notFoundItems.toSource()); + + if(errorItems.length > 0) + logging.log("EWSSYnc error items: " + errorItems.toSource()); + + if(doDebug && deletedItems.length > 0) + logging.log("EWSSYnc deleted items: " + deletedItems.toSource()); + } + return errorItems; +} + + + +/* + * updates the Synced Contacts for the passed User + * + * @param {String} pUserID ID of the User for which Contact should be updated + * @param {String} pMailBox Exchange Mail + * @param {String} pAlias name of the Exchange Alias + * @param {String} pRunDate lastRunDate of the sync + * @param {String} pUser Login of the User + * @param {boolean} doDebug + * +*/ +function EWSupdateContactsForUser(pUserID, pMailBox, pAlias, pRunDate, pUser, doDebug) +{ + var runDate = (!pRunDate) ? 0 : pRunDate; + + //get Contacts for update + var cond = newWhere("AB_SYNCCONTACT.EXCHANGEID is not null") + .and("AB_SYNCCONTACT.USER_ID", pUserID) + .and("AB_SYNCCONTACT.DATE_EDIT", runDate, SqlBuilder.GREATER()); + + var contactsData = newSelect("AB_SYNCCONTACT.CONTACT_ID") + .from("AB_SYNCCONTACT") + .where(cond) + .arrayColumn(); + + var retMsg = []; + + if (contactsData.length > 0) + { + //get data with config + var config = EwsClientSyncUtils.getPlaceholders(pUserID); + var data = getAddressData(contactsData, config); + + //data pos 0 contains column Name - use them as key for the User object + var header = []; + for (let i = 0; i < data[0].length; i++) + { + header.push(data[0][i].replace(new RegExp("[{@}]","g"), "")); //replace start and end delimeter which are set in the getAdressData Method + } + + var dataObj, addrObj, addrValueObjBusiness, addrValueObjHome, addrValueObjOther, exchangeId; + var objects = []; + //loop through array at pos 1, header has been already collected + for (let i = 1; i < data.length; i++) + { + //dataObj at pos data[i][j] will match to the header[j] + dataObj = new Object(); + addrObj = new Object(); + addrValueObjBusiness = {}; + addrValueObjHome = {}; + addrValueObjOther = {}; + + //addressdata will allocated with tags (Business_, Home_, Other_) to each object + for (let j = 0; j < header.length; j++) + { + addDataToValueObjects(header[j], data[i][j], dataObj, addrValueObjBusiness, addrValueObjHome, addrValueObjOther); + } + + //build addr object out of the objects generated above + buildAddrObject(addrObj, addrValueObjHome, addrValueObjBusiness, addrValueObjOther); + + // Get the exchangeID from the data-object for update + let exchangeId = dataObj["EXCHANGEID"].value; + objects.push([exchangeId, dataObj, addrObj]); + } + + var errorItems = []; + var notFoundItems = []; + var deletedItems = []; + + while(objects.length > 0) + { + let objectsPart = objects.splice(0, 200);//currently max limit: 200 + try + { + exchangeIds = EwsSyncContactUtils.updateContacts(pAlias, pMailBox, objectsPart, doDebug);//run plugin + } + catch(ex) + { + let errMsg = "Error while calling the plugin: " + logging.toLogString(ex.rhinoException != undefined ? ex.rhinoException : ex, true) + "\r\n"; + logging.log(errMsg); + return [errMsg]; + } + + //exchangeIDs[1] array for the contacts which got an error + while(exchangeIds[1].length > 0) + { + var deletes = []; + + let exchangeIdsPart = exchangeIds[1].splice(0, 30); + + for (let i = 0; i < exchangeIdsPart.length; i++) + { + //contact which aren't in Exchange anymore can be deleted out of the sync + if(exchangeIdsPart[i][3] == "ErrorItemNotFound") + { + deletes.push(exchangeIdsPart[i][0]); + notFoundItems.push(exchangeIdsPart[i][0] , pUserID); + } + else + { + errorItems.push(exchangeIdsPart[i].toSource(), pUserID); + retMsg.push( exchangeIDs[1][0] + " : " + exchangeIDs[1][2] + " " + exchangeIDs[1][3] ); + } + } + + if(deletes.length > 0) + { + //delete out of sync table + db.deleteData("AB_SYNCCONTACT", " CONTACT_ID in ('" + deletes.join("', '") + "') and USER_ID = '" + pUserID + "'", "Data_alias", 300000); + + //remove set favorite for those which are delted - otherwise they would appear in the next run as 'new' Contacts + EwsClientSyncUtils.removeFromFavorite(deletes, pUserID); + deletedItems = deletedItems.concat(deletes); + } + } + }//while object > 0 + + if(doDebug && notFoundItems.length > 0) + logging.log("EWSSYnc not found items: " + notFoundItems.toSource()); + + if(errorItems.length > 0) + logging.log("EWSSYnc error items: " + errorItems.toSource()); + + if(doDebug && deletedItems.length > 0) + logging.log("EWSSYnc deleted items: " + deletedItems.toSource()); + }//contactsData.length > 0 + + return retMsg; +} + +/* + * updates the Synced Contacts for the passed User + * + * @param {String} pUserID ID of the User for which Contact should be updated + * @param {String} pMailBox Exchange Mail + * @param {String} pAlias name of the Exchange Alias + * @param {String} pRunDate lastRunDate of the sync + * @param {String} pUser Login of the User + * @param {boolean} doDebug + * +*/ +function EWSinsertContactsForUser(pUserID, pMailBox, pAlias, pRunDate, pUser, doDebug) +{ + var cond = newWhere("AB_SYNCCONTACT.EXCHANGEID is null") + .and("AB_SYNCCONTACT.USER_ID", pUserID); + + var contactsData = newSelect("AB_SYNCCONTACT.CONTACT_ID") + .from("AB_SYNCCONTACT") + .where(cond) + .arrayColumn(); + var retMsg = []; + if (contactsData.length > 0) + { + var config = EwsClientSyncUtils.getPlaceholders(pUserID) + var data = getAddressData(contactsData, config); + + var header = []; + for (let i = 0; i < data[0].length; i++) + { + header.push(data[0][i].replace(new RegExp("[{@}]","g"), "")) + } + + var dataObj; + var addrObj; + var objects = []; + var addrValueObjHome = {}; + var addrValueObjBusiness = {}; + var addrValueObjOther = {}; + + + //get ID of the ADITO-Ordners + var folderID = getExchangeFolderID(pAlias, pMailBox, "ADITO"); + if (folderID != "") + { + //loop through array at pos 1, header has been already collected + for (var i = 1; i < data.length; i++) + { + dataObj = new Object(); + addrObj = new Object(); + addrValueObjBusiness = {}; + addrValueObjHome = {}; + addrValueObjOther = {}; + + // The address data gets assigned to the respective object + for (let j = 0; j < header.length; j++) + { + addDataToValueObjects(header[j], data[i][j], dataObj, addrValueObjBusiness, addrValueObjHome, addrValueObjOther); + } + + buildAddrObject(addrObj, addrValueObjHome, addrValueObjBusiness, addrValueObjOther); + objects.push([dataObj, addrObj]); + } + + while(objects.length > 0) + { + let objectPart = objects.splice(0, 200); //current limit 200 + + + let exchangeIDs = EwsSyncContactUtils.insertContactsToFolder(pAlias, pMailBox, folderID, objectPart, doDebug); + + while(exchangeIDs[0].length > 0) + { + let exchangeIDsPart = exchangeIDs[0].splice(0, 30);//current limit 30 + updateADITOContactsAfterAction(exchangeIDsPart, pUserID); + } + + //when errors occured + while(exchangeIDs[1].length > 0) + { + retMsg.push( exchangeIDs[1][0] + " : " + exchangeIDs[1][2] + " " + exchangeIDs[1][3] ) + } + }//objects.length > 0 + } + else + return ["No folder 'ADITO' for account '" + pMailBox + "' and user '" + pUser + "' found"]; + } + return retMsg; +} + + +/* + * allocates passed headers/values to their object + * + * @param pHeader {String} fieldname in exchange + * @param pData {String} value for Header + * @param pDataObj {{}} object for contactdata + * @param pAddrValueObjBusiness {{}} adressobject Organisations + * @param pAddrValueObjHome {{}} adressobject homeadress + * @param pAddrValueObjOther {{}} adressobject others + * + */ +function addDataToValueObjects(pHeader, pData, pDataObj, pAddrValueObjBusiness, pAddrValueObjHome, pAddrValueObjOther) +{ + //with used appendChild method the pData values will be escaped automatically + + //differ contactdata and adressdata + //none of the abbreviation defined by the config + var headerNotNull = ["EmailAdress1", "EmailAddress2", "BusinessPhone", "BusinessHomepage", "HomePhone", "HomeFax", "OtherFax", "MobilePhone"]; + + if (pData != "" || headerNotNull.indexOf(pHeader) == -1) + { + if (pHeader.indexOf("Business_") == -1 && pHeader.indexOf("Home_") == -1 && pHeader.indexOf("Other_") == -1 && pData != "") + { + pDataObj[pHeader] = { + "key" : pHeader, + "value" : pData + }; + } + else + { + //Organisation Adress + if (pHeader.indexOf("Business") != -1) + { + pHeader = pHeader.replace("Business_", ""); + pAddrValueObjBusiness[pHeader] = { + "key" : pHeader, + "value" : pData + } + } + //Privatadress + else if (pHeader.indexOf("Home") != -1) + { + pHeader = pHeader.replace("Home_", ""); + pAddrValueObjHome[pHeader] = { + "key" : pHeader, + "value" : pData + } + } + //other Adress + else if (pHeader.indexOf("Other") != -1) + { + pHeader = pHeader.replace("Other_", ""); + pAddrValueObjOther[pHeader] = { + "key" : pHeader, + "value" : pData + } + } + } + } +} + +/* + * Build Address Object for the plugin call + * + * @param pAddrObject {{}} addressobject for call + * @param pAddrValueObjHome {{}} adressobject with Privatadresse + * @param pAddrValueObjBusiness {{}} adressobject for Organisation + * @param pAddrValueObjOther {{}} adressobject for other adresses + */ +function buildAddrObject(pAddrObject, pAddrValueObjHome, pAddrValueObjBusiness, pAddrValueObjOther) +{ + var homeOk = false; + var businessOk = false; + var otherOk = false; + + for each (var obj in pAddrValueObjHome) + { + if (obj["value"] != "") + { + homeOk = true; + break; + } + } + for each (obj in pAddrValueObjBusiness) + { + if (obj["value"] != "") + { + businessOk = true; + break; + } + } + for each (obj in pAddrValueObjOther) + { + if (obj["value"] != "") + { + otherOk = true; + break; + } + } + + if (homeOk) + { + pAddrObject["Home"] = { + "addressKey" : "Home", + "value" : pAddrValueObjHome + }; + } + if (businessOk) + { + pAddrObject["Business"] = { + "addressKey" : "Business", + "value" : pAddrValueObjBusiness + }; + } + if (otherOk) + { + pAddrObject["Other"] = { + "addressKey" : "Other", + "value" : pAddrValueObjOther + }; + } +} + +/* + * returns the exchangeID of the ADITO Folder of an exchange User + * if no folder is passed all folderIDs will be returned + * + * @param {String} pAlias exchange-alias + * @param {String} pMailBox mail-adress of the user + * @param {String} pFolderName name of the folder for which the ID should returned none if all + */ +function getExchangeFolderID(pAlias, pMailBox, pFolderName) +{ + var folders = EwsSyncContactUtils.getContactFolders(pAlias, pMailBox); + + for ( var i = 0; i < folders.length; i++) + { + if( folders[i].name.toUpperCase() == pFolderName.toUpperCase() ) + return folders[i].id; + } + return ""; +} + +function escapeValuesForXML(pValue){ + + var reps = {}; + reps["&"] = "&"; + reps["\""] = """; + reps["'"] = "&apos"; + reps["<"] = "<"; + reps[">"] = ">"; + + pValue = text.replaceAll(pValue, reps).trim(); + + return pValue +} + +/* +* Updates the Edit-Date and the exchangeID into the associated data set of AOSYS_SYNCCONTACT +* If the ExchangeID isn't passed, then it will just update DATE_EDIT +* +* @param {Array<Array>} pUpdateValues 2d-array in the following form: [[CONTACTID, matching new EXCHANGEID]] +* @param {String} pUserID ID of the corresponding user +*/ +function updateADITOContactsAfterAction(pUpdateValues, pUserID) +{ + var cols = ["EXCHANGEID"]; + var types = db.getColumnTypes("AB_SYNCCONTACT", cols); + var vals; + var cond = ""; + var updArr = []; + for (let i = 0; i < pUpdateValues.length; i++) + { + vals = []; + // Get EXCHANGEID + if (pUpdateValues[i][1]) + vals.push(pUpdateValues[i][1]); + + cond = "CONTACT_ID = '" + pUpdateValues[i][0] + "' and USER_ID = '" + pUserID + "'"; + updArr.push(["AB_SYNCCONTACT", cols, types, vals, cond]); + } + db.updates(updArr, "Data_alias", 300000); +} diff --git a/process/migrateKeywordContainers/documentation.adoc b/process/migrateKeywordContainers/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..78555b64402db050fd1118cbbc0cb66b0d32834e --- /dev/null +++ b/process/migrateKeywordContainers/documentation.adoc @@ -0,0 +1,8 @@ += Keyword Migration +This process can be used to, either directly migrate the keywords in the database, or generating liquibase scripts which do the same. It can also write the generated files to the server log. + +[EXPORT_TO_LIQUIBASE] +If the EXPORT_TO_LIQUIBASE option is set to true, the process will generate liquibase files, otherwise it would directly modify the database tables. + +[WRITE_FILES_TO_LOG] +If the WRITE_FILES_TO_LOG is set to true, the generated liquibase files will be written to the server log. This is especially useful for cloud systems. diff --git a/process/migrateKeywordContainers/migrateKeywordContainers.aod b/process/migrateKeywordContainers/migrateKeywordContainers.aod new file mode 100644 index 0000000000000000000000000000000000000000..f75e9611757d2a319020405c1cce43b848c87471 --- /dev/null +++ b/process/migrateKeywordContainers/migrateKeywordContainers.aod @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>migrateKeywordContainers</name> + <title>Migrate keyword containers</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/migrateKeywordContainers/documentation.adoc</documentation> + <process>%aditoprj%/process/migrateKeywordContainers/process.js</process> + <publishAsWebservice v="true" /> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/migrateKeywordContainers/process.js b/process/migrateKeywordContainers/process.js new file mode 100644 index 0000000000000000000000000000000000000000..ed93803b8ec48f1ae71955bec44e3847f906ed94 --- /dev/null +++ b/process/migrateKeywordContainers/process.js @@ -0,0 +1,149 @@ +import("system.fileIO"); +import("system.db"); +import("system.SQLTYPES"); +import("system.logging"); +import("system.util"); +import("system.vars"); +import("Sql_lib"); +import("Util_lib"); +import("Liquibase_lib"); + +// Change this to switch between generating liquibase file and directly modify the db +var EXPORT_TO_LIQUIBASE = true; + +// Writes the liquibase files to log instead of writing them to disk +// Useful for cloud systems +var WRITE_FILES_TO_LOG = false; + +var oldKeywordContainers = newSelect("AB_KEYWORD_ENTRY.CONTAINER") + .from("AB_KEYWORD_ENTRY") + .where( + "AB_KEYWORD_ENTRY.CONTAINER", + newSelect("AB_KEYWORD_CATEGORY.NAME") + .from("AB_KEYWORD_CATEGORY") + .where("AB_KEYWORD_CATEGORY.NAME = AB_KEYWORD_ENTRY.CONTAINER"), + SqlBuilder.NOT_EXISTS() + ) + .groupBy("AB_KEYWORD_ENTRY.CONTAINER") + .orderBy("AB_KEYWORD_ENTRY.CONTAINER") + .arrayColumn(); + +var categories = {}; +newSelect(["AB_KEYWORD_CATEGORYID", "AB_KEYWORD_CATEGORY.NAME"]) +.from("AB_KEYWORD_CATEGORY").table().forEach(function(pRow) { + categories[pRow[1]] = pRow[0]; +}); + +if(EXPORT_TO_LIQUIBASE) +{ + function _writeLiquibaseXml(name, xmlScript) + { + var fileContent = LiquiXmlUtils.xmlHeaderLineStr() + "\n" + xmlScript; + if(WRITE_FILES_TO_LOG) + { + logging.log(name); + logging.log(fileContent + "\n"); + } + else + { + var outFolderPath = vars.get("$sys.servertemp") + "/" + "keywordMigration" + "/"; + fileIO.storeData(outFolderPath + name, + fileContent, util.DATA_TEXT, false, "UTF-8"); + } + } + + // init_keyword_category.xml + var liquibaseContainers = LiquiXmlUtils.databaseChangeLogWithChangeSet("autogenerated"); + oldKeywordContainers.forEach(function(pElement) { + var uuid = util.getNewUUID(); + categories[pElement] = uuid; + + var categoryTable = LiquiXTable.make("AB_KEYWORD_CATEGORY"); + categoryTable.addIdCol("AB_KEYWORD_CATEGORYID", uuid); + categoryTable.addStrCol("NAME", pElement); + categoryTable.addNumberCol("SORTINGBY", 0); + categoryTable.addStrCol("SORTINGDIRECTION", "ASC"); + liquibaseContainers.changeSet.insert += categoryTable.xml; + }); + _writeLiquibaseXml("init_keyword_category.xml", liquibaseContainers); + + // update_keyword_entry + var updateEntryChangeset = LiquiXmlUtils.databaseChangeLogWithChangeSet("autogenerated"); + newSelect(["AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.CONTAINER"]) + .from("AB_KEYWORD_ENTRY") + .where("AB_KEYWORD_CATEGORY_ID is null") + .table().forEach(function(pRow) { + var updateXml = <update tableName="AB_KEYWORD_ENTRY"/>; + updateXml.column = <column name="AB_KEYWORD_CATEGORY_ID" value={categories[pRow[1]]}/>; + updateXml.where = <where>AB_KEYWORD_ENTRYID = {"'" + pRow[0] + "'"}</where>; + updateEntryChangeset.changeSet.update += updateXml; + }); + _writeLiquibaseXml("update_keyword_entry.xml", updateEntryChangeset); + + // update_keyword_attribute + var updateAttributeChangeset = LiquiXmlUtils.databaseChangeLogWithChangeSet("autogenerated"); + newSelect(["AB_KEYWORD_ATTRIBUTEID", "AB_KEYWORD_ATTRIBUTE.CONTAINER"]) + .from("AB_KEYWORD_ATTRIBUTE") + .where("AB_KEYWORD_CATEGORY_ID is null") + .table().forEach(function(pRow) { + var updateXml = <update tableName="AB_KEYWORD_ATTRIBUTE"/>; + updateXml.column = <column name="AB_KEYWORD_CATEGORY_ID" value={categories[pRow[1]]}/>; + updateXml.where = <where>AB_KEYWORD_ATTRIBUTEID = {"'" + pRow[0] + "'"}</where>; + updateAttributeChangeset.changeSet.update += updateXml; + }); + _writeLiquibaseXml("update_keyword_attribute.xml", updateAttributeChangeset); + + // changelog.xml + var changelogFile = LiquiXmlUtils.databaseChangeLog(); + changelogFile.include += <include relativeToChangelogFile="true" file="init_keyword_category.xml"/>; + changelogFile.include += <include relativeToChangelogFile="true" file="update_keyword_entry.xml"/>; + changelogFile.include += <include relativeToChangelogFile="true" file="update_keyword_attribute.xml"/>; + _writeLiquibaseXml("changelog.xml", changelogFile); + + logging.log("Keyword migration liquibase scripts created succesfully"); +} +else +{ + var statements = []; + + oldKeywordContainers.forEach(function(pElement) { + var uuid = util.getNewUUID(); + categories[pElement] = uuid; + + var columns = ["AB_KEYWORD_CATEGORYID", "NAME", "SORTINGBY", "SORTINGDIRECTION"]; + statements.push([ + "AB_KEYWORD_CATEGORY", + columns, + db.getColumnTypes("AB_KEYWORD_CATEGORY", columns), + [uuid, pElement, "0", "ASC"] + ]); + }); + + var FIELD_NAMES = ["AB_KEYWORD_CATEGORY_ID"]; + var FIELD_TYPES = [SQLTYPES.VARCHAR]; + + newSelect(["AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.CONTAINER"]) + .from("AB_KEYWORD_ENTRY") + .where("AB_KEYWORD_CATEGORY_ID is null") + .table().forEach(function(pRow) { + statements.push([ + "AB_KEYWORD_ENTRY", + FIELD_NAMES, FIELD_TYPES, + [categories[pRow[1]]], + "AB_KEYWORD_ENTRYID = '" + pRow[0] + "'"]); + }); + + newSelect(["AB_KEYWORD_ATTRIBUTEID", "AB_KEYWORD_ATTRIBUTE.CONTAINER"]) + .from("AB_KEYWORD_ATTRIBUTE") + .where("AB_KEYWORD_CATEGORY_ID is null") + .table().forEach(function(pRow) { + statements.push([ + "AB_KEYWORD_ATTRIBUTE", + FIELD_NAMES, FIELD_TYPES, + [categories[pRow[1]]], + "AB_KEYWORD_ATTRIBUTEID = '" + pRow[0] + "'"]); + }); + + db.execute(statements); + logging.log("Keywords migrated succesfully"); +} diff --git a/process/updateClassifications_serverProcess/process.js b/process/updateClassifications_serverProcess/process.js index db4ab9c27872d6cafb239be8b3f848e9dbaad65e..30a7d27f5d90e0f24f1f502e51d0901f6c22a497 100644 --- a/process/updateClassifications_serverProcess/process.js +++ b/process/updateClassifications_serverProcess/process.js @@ -1,3 +1,4 @@ +import("system.vars"); import("Context_lib"); import("system.util"); import("Util_lib"); @@ -29,6 +30,7 @@ var classificationStorageObject = {}; //object to store the classificationstorag var groupObject = {}; //groupObject is another helper object to store all the groupIds var outdatedClassificationTypeObj = {};//object to store all outdated classificationtypes (need so we can add empty persisted data later var alreadyUpdatedTypesObj = {}; +var storedClassificationValues = {}; //arrays mainly used for filling the objects var objectTypes = []; @@ -42,6 +44,7 @@ var scoreArray = []; var objectTypesThatNeedUpdate = []; var outdatedStoredClassifications = []; var objectRowIdArray = []; +var objectsThatWillBeUpdated = []; var object_type, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore, classificationGradingId, score, cond, classificationGradingMaxScore, classificationGrading, chainedGrading, currentObjectColumn, currentObjectTable, isOrganisation, bestValue, minPercent, @@ -50,12 +53,39 @@ achievedScoresStmt, position, bestPossibleScoreStmt, storedClassificationFlag, d var table = "CLASSIFICATIONSTORAGE"; var column = ["CLASSIFICATIONVALUE"]; var runUpdating = 0; +var singleRefresh = false; +var recalculateAll = false; -//all classificationgroups and their object_type that have atleast one classificationtype with the outdated flag set -outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") +if(vars.exists("$local.refreshSingleRecord_param") && vars.get("$local.refreshSingleRecord_param")) +{ + singleRefresh = vars.get("$local.refreshSingleRecord_param"); +} +else if(vars.exists("$local.recalculateAll_param") && vars.get("$local.recalculateAll_param")) +{ + recalculateAll = vars.get("$local.recalculateAll_param"); +} + + +if(singleRefresh) +{ + outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", vars.get("$local.ObjectType_param")) + .table(); +} +else if(recalculateAll) +{ + outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") + .from("CLASSIFICATIONTYPE") + .table(); +} +else //all classificationgroups and their object_type that have atleast one classificationtype with the outdated flag set +{ + outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") .from("CLASSIFICATIONTYPE") .where("CLASSIFICATIONTYPE.OUTDATED", 1) .table(); +} objectTypesThatNeedUpdate = []; for (i = 0; i < outdatedGroupsAndObjectTypes.length; i++) @@ -95,43 +125,88 @@ for (i = 0; i < outdatedGroupsAndObjectTypes.length; i++) helperObject[classificationTypeId] = ""; } } - -//object_type, object_rowId, classificationstorageId and the classificationstring (e.g. "ACB") of the classificationStorage datasets that habe the outdated flag set -outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID, \n\ - CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") - .from("CLASSIFICATIONSTORAGE") - .where("CLASSIFICATIONSTORAGE.OUTDATED", 1) - .orderBy("OBJECT_TYPE") - .table(); -helperObject = {}; -if(outdatedStoredClassifications) +if(!singleRefresh) { - //build classificationStorageObject out of outdatedStoredClassifications - for (i = 0; i < outdatedStoredClassifications.length; i++) + if(recalculateAll) + { + outdatedStoredClassifications = newSelect("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID\n\ + ,"+ SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID is null")) + .then("''") + .elseValue("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID") + .toString()+ "\n\ + ,"+ SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE is null")) + .then("''") + .elseValue("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") + .toString()+ + ", CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATION.VALUE, CLASSIFICATION.SCOREPOINTS") + .from("CLASSIFICATION") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CLASSIFICATION.OBJECT_ROWID") + .orderBy("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID") + .table(); + } + else { - for (ii = 0; ii < outdatedStoredClassifications[i].length; ii++) + //object_type, object_rowId, classificationstorageId and the classificationstring (e.g. "ACB") of the classificationStorage datasets that habe the outdated flag set + outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID, \n\ + CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") + .from("CLASSIFICATIONSTORAGE") + .where("CLASSIFICATIONSTORAGE.OUTDATED", 1) + .orderBy("OBJECT_TYPE") + .table(); + } + + var storedClassificationStorageValues = {}; + if(recalculateAll) + { + let storedValuesArray = newSelect("CLASSIFICATIONSTORAGE.OBJECT_ROWID") + .from("CLASSIFICATIONSTORAGE") + .arrayColumn(); + storedValuesArray.map(function(objRowId){ + storedClassificationStorageValues[objRowId] = ""; + }); + } + + helperObject = {}; + if(outdatedStoredClassifications) + { + //build classificationStorageObject out of outdatedStoredClassifications + for (i = 0; i < outdatedStoredClassifications.length; i++) { - [object_type, object_rowId, classificationStorageId, classificationScore] = outdatedStoredClassifications[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType + for (ii = 0; ii < outdatedStoredClassifications[i].length; ii++) { - classificationStorageObject[object_type] = {}; //puts objectType in classificationStorageObject and already initializes the object that later get's filled with the groups and their types - helperObject[object_type] = ""; - objectTypes.push(object_type); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time) + [object_type, object_rowId, classificationStorageId, classificationScore, classificationTypeId, classificationValue, classificationScorePoints] = outdatedStoredClassifications[i]; - } - if(!helperObject.hasOwnProperty(object_rowId)) //objectRowId - { - classificationStorageObject[object_type][object_rowId] = [classificationStorageId, classificationScore]; //same logic as before - helperObject[object_rowId] = ""; - objectRowIdArray.push(object_rowId); //also push all the objectTypes in an Array for later + if(!helperObject.hasOwnProperty(object_type)) //objectType + { + classificationStorageObject[object_type] = {}; //puts objectType in classificationStorageObject and already initializes the object that later get's filled with the groups and their types + helperObject[object_type] = ""; + objectTypes.push(object_type); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time) + if(recalculateAll) + { + storedClassificationValues[object_type] = {}; + } + + } + if(!helperObject.hasOwnProperty(object_rowId)) //objectRowId + { + classificationStorageObject[object_type][object_rowId] = [classificationStorageId, classificationScore]; //same logic as before + helperObject[object_rowId] = ""; + objectRowIdArray.push(object_rowId); //also push all the objectTypes in an Array for later + if(recalculateAll) + { + storedClassificationValues[object_type][object_rowId] = {"classificationTypeId": classificationTypeId, "classificationValue": classificationValue, "classificationScorePoints":classificationScorePoints}; + if(!storedClassificationStorageValues.hasOwnProperty(object_rowId))//if the dataset doesn't have an classificationStorage dataset but does have classification datasets -> insert it here + { + db.insertData("CLASSIFICATIONSTORAGE", ["CLASSIFICATIONSTORAGEID", "CLASSIFICATIONVALUE", "OBJECT_ROWID", "OBJECT_TYPE", "OUTDATED"], null, [util.getNewUUID(), "-", object_rowId, object_type, 1]) + } + } + } } } } } - - -if(outdatedStoredClassifications.length > 0) + +if(outdatedStoredClassifications.length > 0 && !recalculateAll) { storedClassificationFlag = true; //this variable can easily be checked to see what we are updating runUpdating++; } @@ -225,8 +300,14 @@ for (xyz = 0; xyz < runUpdating; xyz++) } if(!storedClassificationFlag) // we already habe the classificationStorageObject if we are updating for the outdated classificationStorage { + let condIfSingle; + if(vars.exists("$local.ObjectRowid_param") && vars.get("$local.ObjectRowid_param")) + { + condIfSingle = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", vars.get("$local.ObjectRowid_param")); + } classificationStorageArray = newSelect("OBJECT_TYPE, OBJECT_ROWID, CLASSIFICATIONSTORAGEID, CLASSIFICATIONVALUE") .from("CLASSIFICATIONSTORAGE") + .whereIfSet(condIfSingle) .orderBy("OBJECT_TYPE") .table(); helperObject = {}; //resets the helper object @@ -475,18 +556,26 @@ for (xyz = 0; xyz < runUpdating; xyz++) outputInformation[objectTypes[i]].persistentDatasetsUpdated++; helperObject[uid + classificationTypeId] = ""; + + if(recalculateAll) + { +// if(storedClassificationValues[objectTypes[i]][uid][""]) + } } } } } - - if(!storedClassificationFlag) + if(singleRefresh) { - correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()) + correctCondition = newWhere(currentObjectColumn, vars.get("$local.ObjectRowid_param")); + } + else if(storedClassificationFlag) + { + correctCondition = newWhere(currentObjectColumn, objectRowIdArray, SqlBuilder.IN()); } else { - correctCondition = newWhere(currentObjectColumn, objectRowIdArray, SqlBuilder.IN()) + correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()); } achievedScoresStmt = newSelect(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, \n\ @@ -518,7 +607,7 @@ for (xyz = 0; xyz < runUpdating; xyz++) .where(correctCondition); if(isOrganisation) bestPossibleScoreStmt.and("CONTACT.PERSON_ID is null"); - + bestPossibleScoreStmt.orderBy(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID"); bestPossibleScoresGroupObj = {}; @@ -538,7 +627,6 @@ for (xyz = 0; xyz < runUpdating; xyz++) //If this would be done in the batch function it would result in false classificationstorage-results because not all records for a rowId have been used for (var row_Id in achievedScoresObj) { - chainedGrading = classificationStorageObject[objectTypes[i]][row_Id][1]; for (var groupId in achievedScoresObj[row_Id]) @@ -552,6 +640,10 @@ for (xyz = 0; xyz < runUpdating; xyz++) break; } } + while(chainedGrading.length < position + 1) + { + chainedGrading += "-" + } if(achievedScoresObj[row_Id][groupId]["Grade"] != undefined) chainedGrading = StringUtils.replaceAt(chainedGrading, position, achievedScoresObj[row_Id][groupId]["Grade"]); //update the stored classificationString for each dataset else @@ -632,7 +724,7 @@ for (xyz = 0; xyz < runUpdating; xyz++) } } - if(!storedClassificationFlag) + if(!storedClassificationFlag && !singleRefresh) { for (i = 0; i < scoreArray.length; i++) { let cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", scoreArray[i][2]); @@ -794,7 +886,7 @@ function _buildBestPossibleScoresGroupObjFn(pBatchData, pBatchNum) } if(!helperObject.hasOwnProperty(uid + classificationTypeId)) //classificationType { - if(_isRelevant() != false) + if(_isRelevant()) { if(bestPossibleScoresGroupObj[uid][classificationGroupId] == "") bestPossibleScoresGroupObj[uid][classificationGroupId] = 0; @@ -809,10 +901,18 @@ function _buildBestPossibleScoresGroupObjFn(pBatchData, pBatchNum) function _insertPersistendClassificationDataIfNeeded() { - var objectsWithClassification = newSelect("distinct CLASSIFICATION.OBJECT_ROWID") + var objectsWithClassification; + if(singleRefresh) + { + objectsWithClassification = [vars.get("$local.ObjectRowid_param")]; + } + else + { + objectsWithClassification = newSelect("distinct CLASSIFICATION.OBJECT_ROWID") .from("CLASSIFICATION") .where("CLASSIFICATION.OBJECT_TYPE", objectTypes[i]) .arrayColumn(); + } for (z = 0; z < objectsWithClassification.length; z++) { uid = objectsWithClassification[z];