From 013ba190fd93c4a2b75ea61b1b973e0427a69125 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 31 May 2023 04:39:10 +0200 Subject: [PATCH] IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) - Toolbar (#1865) * IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) - Toolbar - add support for AD_Attachment, CM_Chat, AD_PostIt and AD_LabelAssignment for UUID based tables * - Better deprecated message - Better deprecated management for constructors * - Fix non unique exception on ad_changelog - Fix to save changelog just ID on insert and not the UUID for ID based tables --- .../oracle/202305291332_IDEMPIERE-5567.sql | 296 +++++++++++++++++ .../202305291332_IDEMPIERE-5567.sql | 298 ++++++++++++++++++ .../src/org/compiere/model/GridTab.java | 18 +- .../src/org/compiere/model/GridTable.java | 21 +- .../org/compiere/model/I_AD_Attachment.java | 9 + .../compiere/model/I_AD_LabelAssignment.java | 9 + .../src/org/compiere/model/I_AD_PostIt.java | 9 + .../src/org/compiere/model/I_CM_Chat.java | 9 + .../src/org/compiere/model/MAttachment.java | 40 ++- .../src/org/compiere/model/MChat.java | 113 +++---- .../org/compiere/model/MLabelAssignment.java | 39 ++- .../src/org/compiere/model/MPostIt.java | 40 ++- .../src/org/compiere/model/PO.java | 12 +- .../org/compiere/model/X_AD_Attachment.java | 21 +- .../compiere/model/X_AD_LabelAssignment.java | 21 +- .../src/org/compiere/model/X_AD_PostIt.java | 17 +- .../src/org/compiere/model/X_CM_Chat.java | 21 +- .../src/org/compiere/wf/MWFActivity.java | 2 +- .../pipo/srv/PipoDictionaryService.java | 2 +- .../org/compiere/server/AlertProcessor.java | 2 +- .../server/org/compiere/server/Scheduler.java | 6 +- .../adwindow/AbstractADWindowContent.java | 22 +- .../webui/apps/LabelsSearchController.java | 5 +- .../adempiere/webui/panel/LabelsPanel.java | 42 ++- .../adempiere/webui/panel/WAttachment.java | 31 +- .../adempiere/webui/window/LabelAction.java | 3 +- .../src/org/adempiere/webui/window/WChat.java | 9 +- .../org/adempiere/webui/window/WPostIt.java | 10 +- 28 files changed, 984 insertions(+), 143 deletions(-) create mode 100644 migration/iD11/oracle/202305291332_IDEMPIERE-5567.sql create mode 100644 migration/iD11/postgresql/202305291332_IDEMPIERE-5567.sql diff --git a/migration/iD11/oracle/202305291332_IDEMPIERE-5567.sql b/migration/iD11/oracle/202305291332_IDEMPIERE-5567.sql new file mode 100644 index 0000000000..1482fa0103 --- /dev/null +++ b/migration/iD11/oracle/202305291332_IDEMPIERE-5567.sql @@ -0,0 +1,296 @@ +-- IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) +SELECT register_migration_script('202305291332_IDEMPIERE-5567.sql') FROM dual; + +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- May 29, 2023, 1:32:46 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (215842,1,'Record UUID',254,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 13:32:46','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 13:32:46','YYYY-MM-DD HH24:MI:SS'),100,203804,'N','N','D','N','N','N','Y','82a502a9-7d34-4024-adce-7d4f6537d9e9','Y','N','N','M','N') +; + +-- May 29, 2023, 1:33:09 PM CEST +ALTER TABLE AD_Attachment ADD Record_UU VARCHAR2(36 CHAR) DEFAULT NULL +; + +-- May 29, 2023, 1:33:42 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207627,'Record UUID',173,215842,'Y',36,90,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 13:33:42','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 13:33:42','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','f61f312c-8b91-4000-8f06-8cf0eb394bfa','Y',110,2) +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=50, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207627 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=60,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=3819 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=70,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10074 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=80,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206604 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=90,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=961 +; + +-- May 29, 2023, 1:35:34 PM CEST +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2023-05-29 13:35:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2097 +; + +-- May 29, 2023, 1:35:36 PM CEST +ALTER TABLE AD_Attachment MODIFY Record_ID NUMBER(10) DEFAULT NULL +; + +-- May 29, 2023, 1:35:36 PM CEST +ALTER TABLE AD_Attachment MODIFY Record_ID NULL +; + +-- May 29, 2023, 1:36:50 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,IsKey) VALUES (0,0,201249,'38483bb0-dc89-4202-b098-e600bb71e448',TO_TIMESTAMP('2023-05-29 13:36:50','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','ad_attachment_record_uu',TO_TIMESTAMP('2023-05-29 13:36:50','YYYY-MM-DD HH24:MI:SS'),100,254,'N','N','N','N') +; + +-- May 29, 2023, 1:36:58 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201689,'caebdbe7-e600-49fa-82d6-fc9c952e3f07',TO_TIMESTAMP('2023-05-29 13:36:58','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 13:36:58','YYYY-MM-DD HH24:MI:SS'),100,215842,201249,10) +; + +-- May 29, 2023, 1:37:02 PM CEST +CREATE INDEX ad_attachment_record_uu ON AD_Attachment (Record_UU) +; + +-- May 29, 2023, 3:53:58 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,IsToolbarButton,IsSecure,IsHtml,FKConstraintType) VALUES (215843,0,'Record UUID',876,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 15:53:58','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 15:53:58','YYYY-MM-DD HH24:MI:SS'),100,203804,'N','N','D','N','N','N','Y','6ff5f5d7-73e0-40ad-b0fb-24c7fa905bed','Y','N','N','N','O') +; + +-- May 29, 2023, 5:14:56 PM CEST +ALTER TABLE CM_Chat ADD Record_UU VARCHAR2(36 CHAR) DEFAULT NULL +; + +-- May 29, 2023, 5:14:31 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,IsKey) VALUES (0,0,201250,'79030873-e8df-4b29-bb22-78f8cab89eab',TO_TIMESTAMP('2023-05-29 17:14:30','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','cm_chat_record_uu',TO_TIMESTAMP('2023-05-29 17:14:30','YYYY-MM-DD HH24:MI:SS'),100,876,'N','Y','N','N') +; + +-- May 29, 2023, 5:14:36 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201690,'e1dd3f51-921e-44bb-bada-1f047a4b1629',TO_TIMESTAMP('2023-05-29 17:14:36','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 17:14:36','YYYY-MM-DD HH24:MI:SS'),100,215843,201250,10) +; + +-- May 29, 2023, 5:15:06 PM CEST +CREATE UNIQUE INDEX cm_chat_record_uu ON CM_Chat (Record_UU) +; + +-- May 29, 2023, 3:54:59 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207628,'Record UUID',821,215843,'Y',36,100,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 15:54:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 15:54:59','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','d5e76de8-7b65-46c3-b168-192f78e30b29','Y',100,2) +; + +-- May 29, 2023, 3:55:18 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=100, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 15:55:18','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207628 +; + +-- May 29, 2023, 3:55:18 PM CEST +UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2023-05-29 15:55:18','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204751 +; + +-- May 29, 2023, 3:56:02 PM CEST +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2023-05-29 15:56:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=15514 +; + +-- May 29, 2023, 3:56:04 PM CEST +ALTER TABLE CM_Chat MODIFY Record_ID NUMBER(10) DEFAULT NULL +; + +-- May 29, 2023, 3:56:04 PM CEST +ALTER TABLE CM_Chat MODIFY Record_ID NULL +; + +-- May 29, 2023, 5:23:31 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (215844,0,'Record UUID',200215,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 17:23:31','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:23:31','YYYY-MM-DD HH24:MI:SS'),100,203804,'Y','N','D','Y','N','N','Y','a3fa71ca-eb2c-47eb-b388-d3da2a6989ee','Y',0,'N','N','M','N') +; + +-- May 29, 2023, 5:23:33 PM CEST +ALTER TABLE AD_PostIt ADD Record_UU VARCHAR2(36 CHAR) DEFAULT NULL +; + +-- May 29, 2023, 5:23:52 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,TableIndexDrop,IsKey) VALUES (0,0,201251,'652cadb1-d5dc-4fa8-86d6-a8ff7718551c',TO_TIMESTAMP('2023-05-29 17:23:52','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','AD_PostIt_Record_UU',TO_TIMESTAMP('2023-05-29 17:23:52','YYYY-MM-DD HH24:MI:SS'),100,200215,'N','Y','N','N','N') +; + +-- May 29, 2023, 5:23:58 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201691,'797e1821-2972-47be-a881-bba8f3f993a6',TO_TIMESTAMP('2023-05-29 17:23:58','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 17:23:58','YYYY-MM-DD HH24:MI:SS'),100,215844,201251,10) +; + +-- May 29, 2023, 5:24:01 PM CEST +CREATE UNIQUE INDEX AD_PostIt_Record_UU ON AD_PostIt (Record_UU) +; + +-- May 29, 2023, 5:24:27 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,ColumnSpan) VALUES (207629,'AD_PostIt_UU',200220,212933,'N',36,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 17:24:26','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:24:26','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','514955cd-1967-403f-baf0-ef2f7ae05d37','N',2) +; + +-- May 29, 2023, 5:24:27 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207630,'Record UUID',200220,215844,'Y',36,60,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 17:24:27','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:24:27','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','3f4dd6e1-1e7e-47a5-984e-a88c7f9ab349','Y',50,2) +; + +-- May 29, 2023, 5:24:54 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=50, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 17:24:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207630 +; + +-- May 29, 2023, 5:24:54 PM CEST +UPDATE AD_Field SET SeqNo=60,Updated=TO_TIMESTAMP('2023-05-29 17:24:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204349 +; + +-- May 29, 2023, 5:24:54 PM CEST +UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2023-05-29 17:24:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207629 +; + +-- May 29, 2023, 5:26:00 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (215845,0,'Record UUID',200347,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 17:25:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:25:59','YYYY-MM-DD HH24:MI:SS'),100,203804,'N','N','D','N','N','N','Y','8a9d216d-4e90-4c52-aa15-f8beefcb7d84','Y',0,'N','N','M','N') +; + +-- May 29, 2023, 5:26:02 PM CEST +ALTER TABLE AD_LabelAssignment ADD Record_UU VARCHAR2(36 CHAR) DEFAULT NULL +; + +-- May 29, 2023, 5:26:07 PM CEST +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2023-05-29 17:26:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=214903 +; + +-- May 29, 2023, 5:26:09 PM CEST +ALTER TABLE AD_LabelAssignment MODIFY Record_ID NUMBER(10) DEFAULT NULL +; + +-- May 29, 2023, 5:26:09 PM CEST +ALTER TABLE AD_LabelAssignment MODIFY Record_ID NULL +; + +-- May 29, 2023, 5:26:27 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,TableIndexDrop,IsKey) VALUES (0,0,201252,'7e1b1e58-f2e6-4b2d-be6d-7fcbce5da426',TO_TIMESTAMP('2023-05-29 17:26:26','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','ad_labelassignment_record_uu',TO_TIMESTAMP('2023-05-29 17:26:26','YYYY-MM-DD HH24:MI:SS'),100,200347,'N','N','N','N','N') +; + +-- May 29, 2023, 5:26:33 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201692,'daba3554-2805-465b-afd5-0ad29fe9bd79',TO_TIMESTAMP('2023-05-29 17:26:32','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 17:26:32','YYYY-MM-DD HH24:MI:SS'),100,215845,201252,10) +; + +-- May 29, 2023, 5:26:36 PM CEST +CREATE INDEX ad_labelassignment_record_uu ON AD_LabelAssignment (Record_UU) +; + +-- May 29, 2023, 7:20:16 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207631,'Record UUID',200324,215845,'Y',36,80,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 19:20:16','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 19:20:16','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','989dacd0-f98d-410f-a43a-6eb5ff27bea0','Y',80,2) +; + +-- May 29, 2023, 7:20:28 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=80, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:20:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207631 +; + +-- May 29, 2023, 7:30:02 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=70, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:30:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207631 +; + +-- May 29, 2023, 7:30:02 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=80,Updated=TO_TIMESTAMP('2023-05-29 19:30:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207107 +; + +-- May 29, 2023, 7:33:52 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=40, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:33:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207630 +; + +-- May 29, 2023, 7:33:52 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=50,Updated=TO_TIMESTAMP('2023-05-29 19:33:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204348 +; + +-- May 29, 2023, 7:35:06 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=80, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:35:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207628 +; + +-- May 29, 2023, 7:35:06 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@=''''', SeqNo=100, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:35:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13396 +; + +-- May 29, 2023, 7:35:49 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=40, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:35:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207627 +; + +-- May 29, 2023, 7:35:49 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=50,Updated=TO_TIMESTAMP('2023-05-29 19:35:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=964 +; + +-- May 29, 2023, 7:37:52 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=90,Updated=TO_TIMESTAMP('2023-05-29 19:37:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6781 +; + +-- May 29, 2023, 7:37:52 PM CEST +UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2023-05-29 19:37:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6779 +; + +-- May 29, 2023, 7:37:52 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=110, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:37:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207619 +; + +-- May 29, 2023, 7:38:12 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=90,Updated=TO_TIMESTAMP('2023-05-29 19:38:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6771 +; + +-- May 29, 2023, 7:38:12 PM CEST +UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2023-05-29 19:38:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6769 +; + +-- May 29, 2023, 7:38:12 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=110, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:38:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207620 +; + +SET SERVEROUTPUT on; + +-- Set Record_UU for existing records +DECLARE + cmd varchar2(2000); + v_cnt numeric; +BEGIN + FOR r IN ( + SELECT DISTINCT t.TableName, at.AD_Table_ID + FROM AD_Attachment at JOIN AD_Table t ON (at.AD_Table_ID=t.AD_Table_ID) + WHERE at.Record_UU IS NULL AND at.Record_ID IS NOT NULL + ) LOOP + cmd := 'UPDATE AD_Attachment SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=AD_Attachment.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE IMMEDIATE cmd; + DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' AD_Attachment.Record_UU set in ' || r.TableName); + END LOOP; + FOR r IN ( + SELECT DISTINCT t.TableName, ch.AD_Table_ID + FROM CM_Chat ch JOIN AD_Table t ON (ch.AD_Table_ID=t.AD_Table_ID) + WHERE ch.Record_UU IS NULL AND ch.Record_ID IS NOT NULL + ) LOOP + cmd := 'UPDATE CM_Chat SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=CM_Chat.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE IMMEDIATE cmd; + DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' CM_Chat.Record_UU set in ' || r.TableName); + END LOOP; + FOR r IN ( + SELECT DISTINCT t.TableName, po.AD_Table_ID + FROM AD_PostIt po JOIN AD_Table t ON (po.AD_Table_ID=t.AD_Table_ID) + WHERE po.Record_UU IS NULL AND po.Record_ID IS NOT NULL + ) LOOP + cmd := 'UPDATE AD_PostIt SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=AD_PostIt.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE IMMEDIATE cmd; + DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' AD_PostIt.Record_UU set in ' || r.TableName); + END LOOP; + FOR r IN ( + SELECT DISTINCT t.TableName, la.AD_Table_ID + FROM AD_LabelAssignment la JOIN AD_Table t ON (la.AD_Table_ID=t.AD_Table_ID) + WHERE la.Record_UU IS NULL AND la.Record_ID IS NOT NULL + ) LOOP + cmd := 'UPDATE AD_LabelAssignment SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=AD_LabelAssignment.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE IMMEDIATE cmd; + DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' AD_LabelAssignment.Record_UU set in ' || r.TableName); + END LOOP; +END; +/ + diff --git a/migration/iD11/postgresql/202305291332_IDEMPIERE-5567.sql b/migration/iD11/postgresql/202305291332_IDEMPIERE-5567.sql new file mode 100644 index 0000000000..2019f432fd --- /dev/null +++ b/migration/iD11/postgresql/202305291332_IDEMPIERE-5567.sql @@ -0,0 +1,298 @@ +-- IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) +SELECT register_migration_script('202305291332_IDEMPIERE-5567.sql') FROM dual; + +-- May 29, 2023, 1:32:46 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (215842,1,'Record UUID',254,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 13:32:46','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 13:32:46','YYYY-MM-DD HH24:MI:SS'),100,203804,'N','N','D','N','N','N','Y','82a502a9-7d34-4024-adce-7d4f6537d9e9','Y','N','N','M','N') +; + +-- May 29, 2023, 1:33:09 PM CEST +ALTER TABLE AD_Attachment ADD COLUMN Record_UU VARCHAR(36) DEFAULT NULL +; + +-- May 29, 2023, 1:33:42 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207627,'Record UUID',173,215842,'Y',36,90,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 13:33:42','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 13:33:42','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','f61f312c-8b91-4000-8f06-8cf0eb394bfa','Y',110,2) +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=50, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207627 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=60,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=3819 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=70,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10074 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=80,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206604 +; + +-- May 29, 2023, 1:34:28 PM CEST +UPDATE AD_Field SET SeqNo=90,Updated=TO_TIMESTAMP('2023-05-29 13:34:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=961 +; + +-- May 29, 2023, 1:35:34 PM CEST +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2023-05-29 13:35:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2097 +; + +-- May 29, 2023, 1:35:36 PM CEST +INSERT INTO t_alter_column values('ad_attachment','Record_ID','NUMERIC(10)',null,'NULL') +; + +-- May 29, 2023, 1:35:36 PM CEST +INSERT INTO t_alter_column values('ad_attachment','Record_ID',null,'NULL',null) +; + +-- May 29, 2023, 1:36:50 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,IsKey) VALUES (0,0,201249,'38483bb0-dc89-4202-b098-e600bb71e448',TO_TIMESTAMP('2023-05-29 13:36:50','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','ad_attachment_record_uu',TO_TIMESTAMP('2023-05-29 13:36:50','YYYY-MM-DD HH24:MI:SS'),100,254,'N','N','N','N') +; + +-- May 29, 2023, 1:36:58 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201689,'caebdbe7-e600-49fa-82d6-fc9c952e3f07',TO_TIMESTAMP('2023-05-29 13:36:58','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 13:36:58','YYYY-MM-DD HH24:MI:SS'),100,215842,201249,10) +; + +-- May 29, 2023, 1:37:02 PM CEST +CREATE INDEX ad_attachment_record_uu ON AD_Attachment (Record_UU) +; + +-- May 29, 2023, 3:53:58 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,IsToolbarButton,IsSecure,IsHtml,FKConstraintType) VALUES (215843,0,'Record UUID',876,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 15:53:58','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 15:53:58','YYYY-MM-DD HH24:MI:SS'),100,203804,'N','N','D','N','N','N','Y','6ff5f5d7-73e0-40ad-b0fb-24c7fa905bed','Y','N','N','N','O') +; + +-- May 29, 2023, 5:14:56 PM CEST +ALTER TABLE CM_Chat ADD COLUMN Record_UU VARCHAR(36) DEFAULT NULL +; + +-- May 29, 2023, 5:14:31 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,IsKey) VALUES (0,0,201250,'79030873-e8df-4b29-bb22-78f8cab89eab',TO_TIMESTAMP('2023-05-29 17:14:30','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','cm_chat_record_uu',TO_TIMESTAMP('2023-05-29 17:14:30','YYYY-MM-DD HH24:MI:SS'),100,876,'N','Y','N','N') +; + +-- May 29, 2023, 5:14:36 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201690,'e1dd3f51-921e-44bb-bada-1f047a4b1629',TO_TIMESTAMP('2023-05-29 17:14:36','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 17:14:36','YYYY-MM-DD HH24:MI:SS'),100,215843,201250,10) +; + +-- May 29, 2023, 5:15:06 PM CEST +CREATE UNIQUE INDEX cm_chat_record_uu ON CM_Chat (Record_UU) +; + +-- May 29, 2023, 3:54:59 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207628,'Record UUID',821,215843,'Y',36,100,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 15:54:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 15:54:59','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','d5e76de8-7b65-46c3-b168-192f78e30b29','Y',100,2) +; + +-- May 29, 2023, 3:55:18 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=100, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 15:55:18','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207628 +; + +-- May 29, 2023, 3:55:18 PM CEST +UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2023-05-29 15:55:18','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204751 +; + +-- May 29, 2023, 3:56:02 PM CEST +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2023-05-29 15:56:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=15514 +; + +-- May 29, 2023, 3:56:04 PM CEST +INSERT INTO t_alter_column values('cm_chat','Record_ID','NUMERIC(10)',null,'NULL') +; + +-- May 29, 2023, 3:56:04 PM CEST +INSERT INTO t_alter_column values('cm_chat','Record_ID',null,'NULL',null) +; + +-- May 29, 2023, 5:23:31 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (215844,0,'Record UUID',200215,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 17:23:31','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:23:31','YYYY-MM-DD HH24:MI:SS'),100,203804,'Y','N','D','Y','N','N','Y','a3fa71ca-eb2c-47eb-b388-d3da2a6989ee','Y',0,'N','N','M','N') +; + +-- May 29, 2023, 5:23:33 PM CEST +ALTER TABLE AD_PostIt ADD COLUMN Record_UU VARCHAR(36) DEFAULT NULL +; + +-- May 29, 2023, 5:23:52 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,TableIndexDrop,IsKey) VALUES (0,0,201251,'652cadb1-d5dc-4fa8-86d6-a8ff7718551c',TO_TIMESTAMP('2023-05-29 17:23:52','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','AD_PostIt_Record_UU',TO_TIMESTAMP('2023-05-29 17:23:52','YYYY-MM-DD HH24:MI:SS'),100,200215,'N','Y','N','N','N') +; + +-- May 29, 2023, 5:23:58 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201691,'797e1821-2972-47be-a881-bba8f3f993a6',TO_TIMESTAMP('2023-05-29 17:23:58','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 17:23:58','YYYY-MM-DD HH24:MI:SS'),100,215844,201251,10) +; + +-- May 29, 2023, 5:24:01 PM CEST +CREATE UNIQUE INDEX AD_PostIt_Record_UU ON AD_PostIt (Record_UU) +; + +-- May 29, 2023, 5:24:27 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,ColumnSpan) VALUES (207629,'AD_PostIt_UU',200220,212933,'N',36,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 17:24:26','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:24:26','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','514955cd-1967-403f-baf0-ef2f7ae05d37','N',2) +; + +-- May 29, 2023, 5:24:27 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207630,'Record UUID',200220,215844,'Y',36,60,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 17:24:27','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:24:27','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','3f4dd6e1-1e7e-47a5-984e-a88c7f9ab349','Y',50,2) +; + +-- May 29, 2023, 5:24:54 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=50, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 17:24:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207630 +; + +-- May 29, 2023, 5:24:54 PM CEST +UPDATE AD_Field SET SeqNo=60,Updated=TO_TIMESTAMP('2023-05-29 17:24:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204349 +; + +-- May 29, 2023, 5:24:54 PM CEST +UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2023-05-29 17:24:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207629 +; + +-- May 29, 2023, 5:26:00 PM CEST +INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (215845,0,'Record UUID',200347,'Record_UU',36,'N','N','N','N','N',0,'N',200240,0,0,'Y',TO_TIMESTAMP('2023-05-29 17:25:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 17:25:59','YYYY-MM-DD HH24:MI:SS'),100,203804,'N','N','D','N','N','N','Y','8a9d216d-4e90-4c52-aa15-f8beefcb7d84','Y',0,'N','N','M','N') +; + +-- May 29, 2023, 5:26:02 PM CEST +ALTER TABLE AD_LabelAssignment ADD COLUMN Record_UU VARCHAR(36) DEFAULT NULL +; + +-- May 29, 2023, 5:26:07 PM CEST +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2023-05-29 17:26:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=214903 +; + +-- May 29, 2023, 5:26:09 PM CEST +INSERT INTO t_alter_column values('ad_labelassignment','Record_ID','NUMERIC(10)',null,'NULL') +; + +-- May 29, 2023, 5:26:09 PM CEST +INSERT INTO t_alter_column values('ad_labelassignment','Record_ID',null,'NULL',null) +; + +-- May 29, 2023, 5:26:27 PM CEST +INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,TableIndexDrop,IsKey) VALUES (0,0,201252,'7e1b1e58-f2e6-4b2d-be6d-7fcbce5da426',TO_TIMESTAMP('2023-05-29 17:26:26','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','ad_labelassignment_record_uu',TO_TIMESTAMP('2023-05-29 17:26:26','YYYY-MM-DD HH24:MI:SS'),100,200347,'N','N','N','N','N') +; + +-- May 29, 2023, 5:26:33 PM CEST +INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201692,'daba3554-2805-465b-afd5-0ad29fe9bd79',TO_TIMESTAMP('2023-05-29 17:26:32','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2023-05-29 17:26:32','YYYY-MM-DD HH24:MI:SS'),100,215845,201252,10) +; + +-- May 29, 2023, 5:26:36 PM CEST +CREATE INDEX ad_labelassignment_record_uu ON AD_LabelAssignment (Record_UU) +; + +-- May 29, 2023, 7:20:16 PM CEST +INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (207631,'Record UUID',200324,215845,'Y',36,80,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2023-05-29 19:20:16','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2023-05-29 19:20:16','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','989dacd0-f98d-410f-a43a-6eb5ff27bea0','Y',80,2) +; + +-- May 29, 2023, 7:20:28 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=80, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:20:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207631 +; + +-- May 29, 2023, 7:30:02 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=70, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:30:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207631 +; + +-- May 29, 2023, 7:30:02 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=80,Updated=TO_TIMESTAMP('2023-05-29 19:30:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207107 +; + +-- May 29, 2023, 7:33:52 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=40, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:33:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207630 +; + +-- May 29, 2023, 7:33:52 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=50,Updated=TO_TIMESTAMP('2023-05-29 19:33:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204348 +; + +-- May 29, 2023, 7:35:06 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=80, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:35:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207628 +; + +-- May 29, 2023, 7:35:06 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@=''''', SeqNo=100, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:35:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13396 +; + +-- May 29, 2023, 7:35:49 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=40, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:35:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207627 +; + +-- May 29, 2023, 7:35:49 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=50,Updated=TO_TIMESTAMP('2023-05-29 19:35:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=964 +; + +-- May 29, 2023, 7:37:52 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=90,Updated=TO_TIMESTAMP('2023-05-29 19:37:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6781 +; + +-- May 29, 2023, 7:37:52 PM CEST +UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2023-05-29 19:37:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6779 +; + +-- May 29, 2023, 7:37:52 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=110, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:37:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207619 +; + +-- May 29, 2023, 7:38:12 PM CEST +UPDATE AD_Field SET DisplayLogic='@Record_UU@=''''', SeqNo=90,Updated=TO_TIMESTAMP('2023-05-29 19:38:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6771 +; + +-- May 29, 2023, 7:38:12 PM CEST +UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2023-05-29 19:38:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=6769 +; + +-- May 29, 2023, 7:38:12 PM CEST +UPDATE AD_Field SET IsDisplayed='Y', DisplayLogic='@Record_UU@!''''', SeqNo=110, XPosition=4,Updated=TO_TIMESTAMP('2023-05-29 19:38:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207620 +; + +-- Set Record_UU for existing records +DO $$ +DECLARE + cmd varchar(2000); + r record; + v_cnt numeric; +BEGIN + FOR r IN + SELECT DISTINCT t.TableName, at.AD_Table_ID + FROM AD_Attachment at JOIN AD_Table t ON (at.AD_Table_ID=t.AD_Table_ID) + WHERE at.Record_UU IS NULL AND at.Record_ID IS NOT NULL + LOOP + cmd := 'UPDATE AD_Attachment SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=AD_Attachment.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE cmd; + GET DIAGNOSTICS v_cnt = ROW_COUNT; + RAISE NOTICE '% AD_Attachment.Record_UU set in %', v_cnt, r.TableName; + END LOOP; + FOR r IN + SELECT DISTINCT t.TableName, ch.AD_Table_ID + FROM CM_Chat ch JOIN AD_Table t ON (ch.AD_Table_ID=t.AD_Table_ID) + WHERE ch.Record_UU IS NULL AND ch.Record_ID IS NOT NULL + LOOP + cmd := 'UPDATE CM_Chat SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=CM_Chat.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE cmd; + GET DIAGNOSTICS v_cnt = ROW_COUNT; + RAISE NOTICE '% CM_Chat.Record_UU set in %', v_cnt, r.TableName; + END LOOP; + FOR r IN + SELECT DISTINCT t.TableName, po.AD_Table_ID + FROM AD_PostIt po JOIN AD_Table t ON (po.AD_Table_ID=t.AD_Table_ID) + WHERE po.Record_UU IS NULL AND po.Record_ID IS NOT NULL + LOOP + cmd := 'UPDATE AD_PostIt SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=AD_PostIt.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE cmd; + GET DIAGNOSTICS v_cnt = ROW_COUNT; + RAISE NOTICE '% AD_PostIt.Record_UU set in %', v_cnt, r.TableName; + END LOOP; + FOR r IN + SELECT DISTINCT t.TableName, la.AD_Table_ID + FROM AD_LabelAssignment la JOIN AD_Table t ON (la.AD_Table_ID=t.AD_Table_ID) + WHERE la.Record_UU IS NULL AND la.Record_ID IS NOT NULL + LOOP + cmd := 'UPDATE AD_LabelAssignment SET Record_UU=(SELECT ' || r.TableName || '_UU FROM ' || r.TableName + || ' WHERE ' || r.TableName || '_ID=AD_LabelAssignment.Record_ID) WHERE AD_Table_ID=' || r.AD_Table_ID + || ' AND Record_ID IS NOT NULL AND Record_UU IS NULL'; + EXECUTE cmd; + GET DIAGNOSTICS v_cnt = ROW_COUNT; + RAISE NOTICE '% AD_LabelAssignment.Record_UU set in %', v_cnt, r.TableName; + END LOOP; +END; +$$ +; + diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index ea812cc1b2..c7f63d98cd 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -2104,7 +2104,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public boolean canHaveAttachment() { - if (getKeyColumnName().endsWith("_ID")) + if (getKeyColumnName().endsWith("_ID") || getKeyColumnName().endsWith("_UU")) return true; return false; } // canHaveAttachment @@ -2126,8 +2126,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { if (!canHaveAttachment()) return 0; - int recordID = m_mTable.getKeyID(m_currentRow); - return MAttachment.getID(m_vo.AD_Table_ID, recordID); + String recordUU = m_mTable.getKeyUUID(m_currentRow); + return MAttachment.getID(m_vo.AD_Table_ID, recordUU); } // getAttachmentID /** @@ -2147,8 +2147,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { if (!canHaveAttachment()) return 0; - int recordID = m_mTable.getKeyID(m_currentRow); - return MChat.getID(m_vo.AD_Table_ID, recordID); + String recordUU = m_mTable.getKeyUUID(m_currentRow); + return MChat.getID(m_vo.AD_Table_ID, recordUU); } // getCM_ChatID public boolean hasPostIt() @@ -2164,8 +2164,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { if (!canHaveAttachment()) return 0; - int recordID = m_mTable.getKeyID(m_currentRow); - return MPostIt.getID(m_vo.AD_Table_ID, recordID); + String recordUU = m_mTable.getKeyUUID(m_currentRow); + return MPostIt.getID(m_vo.AD_Table_ID, recordUU); } // getAD_PostIt_ID /** @@ -2176,8 +2176,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { if (!canHaveAttachment()) return false; - int recordID = m_mTable.getKeyID(m_currentRow); - return MLabelAssignment.hasAnyAssignment(m_vo.AD_Table_ID, recordID); + String recordUU = m_mTable.getKeyUUID(m_currentRow); + return MLabelAssignment.hasAnyAssignment(m_vo.AD_Table_ID, recordUU); } // hasLabel /** diff --git a/org.adempiere.base/src/org/compiere/model/GridTable.java b/org.adempiere.base/src/org/compiere/model/GridTable.java index aae1e0fe58..54695d04cd 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTable.java +++ b/org.adempiere.base/src/org/compiere/model/GridTable.java @@ -1043,11 +1043,11 @@ public class GridTable extends AbstractTableModel } // getKeyID /** - * Get UUID or null of none + * Get Key UUID or null of none * @param row row - * @return UUID or null + * @return ID or null */ - public UUID getUUID (int row) + public String getKeyUUID (int row) { if (m_indexUUIDColumn != -1) { @@ -1056,7 +1056,7 @@ public class GridTable extends AbstractTableModel String ii = (String)getValueAt(row, m_indexUUIDColumn); if (ii == null) return null; - return UUID.fromString(ii); + return ii; } catch (Exception e) { @@ -1064,6 +1064,19 @@ public class GridTable extends AbstractTableModel } } return null; + } // getKeyUUID + + /** + * Get UUID or null of none + * @param row row + * @return UUID or null + */ + public UUID getUUID (int row) + { + String keyUUID = getKeyUUID(row); + if (keyUUID != null) + return UUID.fromString(keyUUID); + return null; } // getUUID /** diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_Attachment.java b/org.adempiere.base/src/org/compiere/model/I_AD_Attachment.java index 2decd6a337..e41bcad2f6 100644 --- a/org.adempiere.base/src/org/compiere/model/I_AD_Attachment.java +++ b/org.adempiere.base/src/org/compiere/model/I_AD_Attachment.java @@ -165,6 +165,15 @@ public interface I_AD_Attachment */ public int getRecord_ID(); + /** Column name Record_UU */ + public static final String COLUMNNAME_Record_UU = "Record_UU"; + + /** Set Record UUID */ + public void setRecord_UU (String Record_UU); + + /** Get Record UUID */ + public String getRecord_UU(); + /** Column name TextMsg */ public static final String COLUMNNAME_TextMsg = "TextMsg"; diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_LabelAssignment.java b/org.adempiere.base/src/org/compiere/model/I_AD_LabelAssignment.java index 663e251015..4f70d87a65 100644 --- a/org.adempiere.base/src/org/compiere/model/I_AD_LabelAssignment.java +++ b/org.adempiere.base/src/org/compiere/model/I_AD_LabelAssignment.java @@ -165,6 +165,15 @@ public interface I_AD_LabelAssignment */ public int getRecord_ID(); + /** Column name Record_UU */ + public static final String COLUMNNAME_Record_UU = "Record_UU"; + + /** Set Record UUID */ + public void setRecord_UU (String Record_UU); + + /** Get Record UUID */ + public String getRecord_UU(); + /** Column name Updated */ public static final String COLUMNNAME_Updated = "Updated"; diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_PostIt.java b/org.adempiere.base/src/org/compiere/model/I_AD_PostIt.java index b8b205667e..c3d0607fbc 100644 --- a/org.adempiere.base/src/org/compiere/model/I_AD_PostIt.java +++ b/org.adempiere.base/src/org/compiere/model/I_AD_PostIt.java @@ -137,6 +137,15 @@ public interface I_AD_PostIt */ public int getRecord_ID(); + /** Column name Record_UU */ + public static final String COLUMNNAME_Record_UU = "Record_UU"; + + /** Set Record UUID */ + public void setRecord_UU (String Record_UU); + + /** Get Record UUID */ + public String getRecord_UU(); + /** Column name Text */ public static final String COLUMNNAME_Text = "Text"; diff --git a/org.adempiere.base/src/org/compiere/model/I_CM_Chat.java b/org.adempiere.base/src/org/compiere/model/I_CM_Chat.java index 6cd73e802c..69f648ee2b 100644 --- a/org.adempiere.base/src/org/compiere/model/I_CM_Chat.java +++ b/org.adempiere.base/src/org/compiere/model/I_CM_Chat.java @@ -195,6 +195,15 @@ public interface I_CM_Chat */ public int getRecord_ID(); + /** Column name Record_UU */ + public static final String COLUMNNAME_Record_UU = "Record_UU"; + + /** Set Record UUID */ + public void setRecord_UU (String Record_UU); + + /** Get Record UUID */ + public String getRecord_UU(); + /** Column name Updated */ public static final String COLUMNNAME_Updated = "Updated"; diff --git a/org.adempiere.base/src/org/compiere/model/MAttachment.java b/org.adempiere.base/src/org/compiere/model/MAttachment.java index 3fba4cbf1d..f990e1da23 100644 --- a/org.adempiere.base/src/org/compiere/model/MAttachment.java +++ b/org.adempiere.base/src/org/compiere/model/MAttachment.java @@ -58,7 +58,7 @@ public class MAttachment extends X_AD_Attachment /** * */ - private static final long serialVersionUID = -1685512419870004665L; + private static final long serialVersionUID = 1447398065894212273L; /** * @@ -126,13 +126,33 @@ public class MAttachment extends X_AD_Attachment * @param AD_Table_ID table * @param Record_ID record * @param trxName transaction + * @deprecated Use {@link MAttachment#MAttachment(Properties, int, int, String, String)} instead */ public MAttachment(Properties ctx, int AD_Table_ID, int Record_ID, String trxName) { - this (ctx, MAttachment.getID(AD_Table_ID, Record_ID) > 0 ? MAttachment.getID(AD_Table_ID, Record_ID) : 0, trxName); + this(ctx, AD_Table_ID, Record_ID, null, trxName); + if (Record_ID > 0) { + MTable table = MTable.get(AD_Table_ID); + PO po = table.getPO(Record_ID, trxName); + setRecord_UU(po.get_UUID()); + } + } + + /** + * New Constructor + * @param ctx context + * @param AD_Table_ID table + * @param Record_ID record + * @param Record_UU record UUID + * @param trxName transaction + */ + public MAttachment(Properties ctx, int AD_Table_ID, int Record_ID, String Record_UU, String trxName) + { + this (ctx, MAttachment.getID(AD_Table_ID, Record_UU) > 0 ? MAttachment.getID(AD_Table_ID, Record_UU) : 0, trxName); if (get_ID() == 0) { setAD_Table_ID (AD_Table_ID); setRecord_ID (Record_ID); + setRecord_UU (Record_UU); } } // MAttachment @@ -658,7 +678,8 @@ public class MAttachment extends X_AD_Attachment * Get the attachment ID based on table_id and record_id * @param Table_ID * @param Record_ID - * @return AD_Attachment_ID + * @return AD_Attachment_ID + * @deprecated Use {@link MAttachment#getID(int, String)} instead */ public static int getID(int Table_ID, int Record_ID) { String sql="SELECT AD_Attachment_ID FROM AD_Attachment WHERE AD_Table_ID=? AND Record_ID=?"; @@ -666,6 +687,19 @@ public class MAttachment extends X_AD_Attachment return attachid; } + /** + * IDEMPIERE-530 + * Get the attachment ID based on table_id and record_id + * @param Table_ID + * @param Record_UU record UUID + * @return AD_Attachment_ID + */ + public static int getID(int Table_ID, String Record_UU) { + String sql="SELECT AD_Attachment_ID FROM AD_Attachment WHERE AD_Table_ID=? AND Record_UU=?"; + int attachid = DB.getSQLValue(null, sql, Table_ID, Record_UU); + return attachid; + } + public File saveAsZip() { if (getEntryCount() < 1) { return null; diff --git a/org.adempiere.base/src/org/compiere/model/MChat.java b/org.adempiere.base/src/org/compiere/model/MChat.java index 62f13d2e1b..44d37f8b00 100644 --- a/org.adempiere.base/src/org/compiere/model/MChat.java +++ b/org.adempiere.base/src/org/compiere/model/MChat.java @@ -16,21 +16,17 @@ *****************************************************************************/ package org.compiere.model; -import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.text.SimpleDateFormat; -import java.util.ArrayList; +import java.util.List; import java.util.Properties; -import java.util.logging.Level; import org.apache.ecs.xhtml.b; import org.apache.ecs.xhtml.hr; import org.apache.ecs.xhtml.p; -import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.DisplayType; -import org.compiere.util.Env; import org.compiere.util.Util; /** @@ -44,7 +40,7 @@ public class MChat extends X_CM_Chat /** * */ - private static final long serialVersionUID = 9165439123618441913L; + private static final long serialVersionUID = -8255793171229953201L; /** * Get Chats Of Table - of client in context @@ -54,44 +50,17 @@ public class MChat extends X_CM_Chat */ public static MChat[] getOfTable (Properties ctx, int AD_Table_ID) { - int AD_Client_ID = Env.getAD_Client_ID(ctx); - ArrayList list = new ArrayList(); - // - String sql = "SELECT * FROM CM_Chat " - + "WHERE AD_Client_ID=? AND AD_Table_ID=? ORDER BY Record_ID"; - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement (sql, null); - pstmt.setInt (1, AD_Client_ID); - pstmt.setInt (2, AD_Table_ID); - rs = pstmt.executeQuery (); - while (rs.next ()) - { - list.add (new MChat (ctx, rs, null)); - } - } - catch (Exception e) - { - s_log.log (Level.SEVERE, sql, e); - } - finally - { - DB.close(rs, pstmt); - rs = null; pstmt = null; - } - + List list = new Query(ctx, Table_Name, "AD_Table_ID=?", null) + .setClient_ID() + .setParameters(AD_Table_ID) + .setOrderBy(COLUMNNAME_Record_ID) + .list(); // MChat[] retValue = new MChat[list.size()]; list.toArray (retValue); return retValue; } // get - - /** Logger */ - private static CLogger s_log = CLogger.getCLogger (MChat.class); - - + /** * UUID based Constructor * @param ctx Context @@ -142,6 +111,25 @@ public class MChat extends X_CM_Chat setDescription (Description); } // MChat + /** + * Full Constructor + * @param ctx context + * @param AD_Table_ID table + * @param Record_ID record + * @param Record_UU record UUI + * @param Description description + * @param trxName transaction + */ + public MChat (Properties ctx, int AD_Table_ID, int Record_ID, String Record_UU, + String Description, String trxName) + { + this (ctx, 0, trxName); + setAD_Table_ID (AD_Table_ID); + setRecord_ID (Record_ID); + setRecord_UU (Record_UU); + setDescription (Description); + } // MChat + /** * Load Constructor * @param ctx context @@ -168,30 +156,10 @@ public class MChat extends X_CM_Chat { if (m_entries != null && !reload) return m_entries; - ArrayList list = new ArrayList(); - String sql = "SELECT * FROM CM_ChatEntry WHERE CM_Chat_ID=? ORDER BY Created"; - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement (sql, null); - pstmt.setInt (1, getCM_Chat_ID()); - rs = pstmt.executeQuery (); - while (rs.next ()) - { - list.add (new MChatEntry (getCtx(), rs, get_TrxName())); - } - } - catch (Exception e) - { - log.log (Level.SEVERE, sql, e); - } - finally - { - DB.close(rs, pstmt); - rs = null; pstmt = null; - } - + List list = new Query(getCtx(), MChatEntry.Table_Name, "CM_Chat_ID=?", null) + .setParameters(getCM_Chat_ID()) + .setOrderBy(COLUMNNAME_Created) + .list(); // m_entries = new MChatEntry[list.size ()]; list.toArray (m_entries); @@ -253,18 +221,31 @@ public class MChat extends X_CM_Chat // return history; } // getHistory - + /** * IDEMPIERE-530 * Get the chat ID based on table_id and record_id * @param Table_ID * @param Record_ID - * @return CM_Chat_ID + * @return CM_Chat_ID + * @deprecated Use {@link MChat#getID(int, String)} instead */ public static int getID(int Table_ID, int Record_ID) { String sql="SELECT CM_Chat_ID FROM CM_Chat WHERE AD_Table_ID=? AND Record_ID=?"; int chatID = DB.getSQLValueEx(null, sql, Table_ID, Record_ID); return chatID; } - + + /** + * Get the chat ID based on table_id and record_id + * @param Table_ID + * @param Record_UU + * @return CM_Chat_ID + */ + public static int getID(int Table_ID, String Record_UU) { + String sql="SELECT CM_Chat_ID FROM CM_Chat WHERE AD_Table_ID=? AND Record_UU=?"; + int chatID = DB.getSQLValueEx(null, sql, Table_ID, Record_UU); + return chatID; + } + } // MChat diff --git a/org.adempiere.base/src/org/compiere/model/MLabelAssignment.java b/org.adempiere.base/src/org/compiere/model/MLabelAssignment.java index 1d04814084..20af9ba8a5 100644 --- a/org.adempiere.base/src/org/compiere/model/MLabelAssignment.java +++ b/org.adempiere.base/src/org/compiere/model/MLabelAssignment.java @@ -35,9 +35,12 @@ import org.compiere.util.DB; * Label Assignment Model */ public class MLabelAssignment extends X_AD_LabelAssignment { - private static final long serialVersionUID = -964945898771768568L; + /** + * + */ + private static final long serialVersionUID = 2245405505404999887L; - /** + /** * UUID based Constructor * @param ctx Context * @param AD_LabelAssignment_UU UUID key @@ -66,29 +69,57 @@ public class MLabelAssignment extends X_AD_LabelAssignment { public MLabelAssignment(Properties ctx, ResultSet rs, String trxName) { super(ctx, rs, trxName); } - + /** * Check if record has any label assigned * @param Table_ID * @param Record_ID * @return true if record has any label assigned + * @deprecated Use {@link MLabelAssignment#hasAnyAssignment(int, String)} instead */ public static boolean hasAnyAssignment(int Table_ID, int Record_ID) { String sql="SELECT COUNT(*) FROM AD_LabelAssignment WHERE AD_Table_ID=? AND Record_ID=?"; int counter = DB.getSQLValueEx(null, sql, Table_ID, Record_ID); return counter > 0; } - + + /** + * Check if record has any label assigned + * @param Table_ID + * @param Record_UU + * @return true if record has any label assigned + */ + public static boolean hasAnyAssignment(int Table_ID, String Record_UU) { + String sql="SELECT COUNT(*) FROM AD_LabelAssignment WHERE AD_Table_ID=? AND Record_UU=?"; + int counter = DB.getSQLValueEx(null, sql, Table_ID, Record_UU); + return counter > 0; + } + /** * Check if a label is assigned to a record * @param AD_Label_ID * @param Table_ID * @param Record_ID * @return true if label is assigned + * @deprecated Use {@link MLabelAssignment#hasLabelAssignment(int, int, String)} instead */ public static boolean hasLabelAssignment(int AD_Label_ID, int Table_ID, int Record_ID) { String sql="SELECT COUNT(*) FROM AD_LabelAssignment WHERE AD_Label_ID = ? AND AD_Table_ID=? AND Record_ID=?"; int counter = DB.getSQLValueEx(null, sql, AD_Label_ID, Table_ID, Record_ID); return counter > 0; } + + /** + * Check if a label is assigned to a record + * @param AD_Label_ID + * @param Table_ID + * @param Record_UU + * @return true if label is assigned + */ + public static boolean hasLabelAssignment(int AD_Label_ID, int Table_ID, String Record_UU) { + String sql="SELECT COUNT(*) FROM AD_LabelAssignment WHERE AD_Label_ID = ? AND AD_Table_ID=? AND Record_UU=?"; + int counter = DB.getSQLValueEx(null, sql, AD_Label_ID, Table_ID, Record_UU); + return counter > 0; + } + } diff --git a/org.adempiere.base/src/org/compiere/model/MPostIt.java b/org.adempiere.base/src/org/compiere/model/MPostIt.java index 399307514a..aa210c3093 100644 --- a/org.adempiere.base/src/org/compiere/model/MPostIt.java +++ b/org.adempiere.base/src/org/compiere/model/MPostIt.java @@ -31,9 +31,12 @@ import org.compiere.util.Msg; */ public class MPostIt extends X_AD_PostIt { - private static final long serialVersionUID = -5053130533036069784L; + /** + * + */ + private static final long serialVersionUID = -1450160105051825278L; - /** + /** * UUID based Constructor * @param ctx Context * @param AD_PostIt_UU UUID key @@ -68,6 +71,21 @@ public class MPostIt extends X_AD_PostIt setRecord_ID (Record_ID); } // MPostIt + /** + * Full Constructor + * @param ctx context + * @param AD_Table_ID table + * @param Record_ID record + * @param trxName transaction + */ + public MPostIt (Properties ctx, int AD_Table_ID, int Record_ID, String Record_UU, String trxName) + { + this (ctx, 0, trxName); + setAD_Table_ID (AD_Table_ID); + setRecord_ID (Record_ID); + setRecord_UU (Record_UU); + } // MPostIt + /** * Load Constructor * @param ctx context @@ -103,9 +121,27 @@ public class MPostIt extends X_AD_PostIt return retValue; } // getUpdatedString + /** + * @param Table_ID + * @param Record_ID + * @return + * @deprecated Use {@link MPostIt#getID(int, String)} instead + */ public static int getID(int Table_ID, int Record_ID) { String sql="SELECT AD_PostIt_ID FROM AD_PostIt WHERE AD_Table_ID=? AND Record_ID=?"; int postItID = DB.getSQLValueEx(null, sql, Table_ID, Record_ID); return postItID; } + + /** + * @param Table_ID + * @param Record_UU + * @return + */ + public static int getID(int Table_ID, String Record_UU) { + String sql="SELECT AD_PostIt_ID FROM AD_PostIt WHERE AD_Table_ID=? AND Record_UU=?"; + int postItID = DB.getSQLValueEx(null, sql, Table_ID, Record_UU); + return postItID; + } + } // MPostIt diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index 202af4b43c..ea1e11e0ee 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -3373,7 +3373,7 @@ public abstract class PO set_ValueNoCheck(m_KeyColumns[0], m_IDs[0]); } - if (!Env.isUseCentralizedId(p_info.getTableName())) + if (withValues && !Env.isUseCentralizedId(p_info.getTableName())) { int ki = p_info.getColumnIndex(m_KeyColumns[0]); // Change Log - Only @@ -3386,7 +3386,8 @@ public abstract class PO && ( insertLog.equalsIgnoreCase("Y") || ( insertLog.equalsIgnoreCase("K") && ( p_info.getColumn(ki).IsKey - || p_info.getColumn(ki).ColumnName.equals(PO.getUUIDColumnName(p_info.getTableName())))))) + || ( !p_info.hasKeyColumn() + && p_info.getColumn(ki).ColumnName.equals(PO.getUUIDColumnName(p_info.getTableName()))))))) { int id = (m_IDs.length == 1 ? get_ID() : 0); // change log on new @@ -3658,7 +3659,10 @@ public abstract class PO && !p_info.isVirtualColumn(i) // no virtual column && !"Password".equals(p_info.getColumnName(i)) && (insertLog.equalsIgnoreCase("Y") - || (insertLog.equalsIgnoreCase("K") && p_info.getColumn(i).IsKey)) + || (insertLog.equalsIgnoreCase("K") + && ( p_info.getColumn(i).IsKey) + || ( !p_info.hasKeyColumn() + && p_info.getColumn(i).ColumnName.equals(PO.getUUIDColumnName(p_info.getTableName()))))) ) { // change log on new @@ -4995,7 +4999,7 @@ public abstract class PO { getAttachment (false); if (m_attachment == null) - m_attachment = new MAttachment (getCtx(), p_info.getAD_Table_ID(), get_ID(), null); + m_attachment = new MAttachment (getCtx(), p_info.getAD_Table_ID(), get_ID(), get_UUID(), null); return m_attachment; } // createAttachment diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_Attachment.java b/org.adempiere.base/src/org/compiere/model/X_AD_Attachment.java index 41820c87a8..ee5679d2e7 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_Attachment.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_Attachment.java @@ -31,7 +31,7 @@ public class X_AD_Attachment extends PO implements I_AD_Attachment, I_Persistent /** * */ - private static final long serialVersionUID = 20230409L; + private static final long serialVersionUID = 20230529L; /** Standard Constructor */ public X_AD_Attachment (Properties ctx, int AD_Attachment_ID, String trxName) @@ -41,7 +41,6 @@ public class X_AD_Attachment extends PO implements I_AD_Attachment, I_Persistent { setAD_Attachment_ID (0); setAD_Table_ID (0); - setRecord_ID (0); setTitle (null); } */ } @@ -54,7 +53,6 @@ public class X_AD_Attachment extends PO implements I_AD_Attachment, I_Persistent { setAD_Attachment_ID (0); setAD_Table_ID (0); - setRecord_ID (0); setTitle (null); } */ } @@ -67,7 +65,6 @@ public class X_AD_Attachment extends PO implements I_AD_Attachment, I_Persistent { setAD_Attachment_ID (0); setAD_Table_ID (0); - setRecord_ID (0); setTitle (null); } */ } @@ -80,7 +77,6 @@ public class X_AD_Attachment extends PO implements I_AD_Attachment, I_Persistent { setAD_Attachment_ID (0); setAD_Table_ID (0); - setRecord_ID (0); setTitle (null); } */ } @@ -243,6 +239,21 @@ public class X_AD_Attachment extends PO implements I_AD_Attachment, I_Persistent return ii.intValue(); } + /** Set Record UUID. + @param Record_UU Record UUID + */ + public void setRecord_UU (String Record_UU) + { + set_ValueNoCheck (COLUMNNAME_Record_UU, Record_UU); + } + + /** Get Record UUID. + @return Record UUID */ + public String getRecord_UU() + { + return (String)get_Value(COLUMNNAME_Record_UU); + } + /** Set Text Message. @param TextMsg Text Message */ diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_LabelAssignment.java b/org.adempiere.base/src/org/compiere/model/X_AD_LabelAssignment.java index 8a4b9d89b4..ed2b7087e1 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_LabelAssignment.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_LabelAssignment.java @@ -30,7 +30,7 @@ public class X_AD_LabelAssignment extends PO implements I_AD_LabelAssignment, I_ /** * */ - private static final long serialVersionUID = 20230409L; + private static final long serialVersionUID = 20230529L; /** Standard Constructor */ public X_AD_LabelAssignment (Properties ctx, int AD_LabelAssignment_ID, String trxName) @@ -40,7 +40,6 @@ public class X_AD_LabelAssignment extends PO implements I_AD_LabelAssignment, I_ { setAD_Label_ID (0); setAD_Table_ID (0); - setRecord_ID (0); } */ } @@ -52,7 +51,6 @@ public class X_AD_LabelAssignment extends PO implements I_AD_LabelAssignment, I_ { setAD_Label_ID (0); setAD_Table_ID (0); - setRecord_ID (0); } */ } @@ -64,7 +62,6 @@ public class X_AD_LabelAssignment extends PO implements I_AD_LabelAssignment, I_ { setAD_Label_ID (0); setAD_Table_ID (0); - setRecord_ID (0); } */ } @@ -76,7 +73,6 @@ public class X_AD_LabelAssignment extends PO implements I_AD_LabelAssignment, I_ { setAD_Label_ID (0); setAD_Table_ID (0); - setRecord_ID (0); } */ } @@ -237,4 +233,19 @@ public class X_AD_LabelAssignment extends PO implements I_AD_LabelAssignment, I_ return 0; return ii.intValue(); } + + /** Set Record UUID. + @param Record_UU Record UUID + */ + public void setRecord_UU (String Record_UU) + { + set_ValueNoCheck (COLUMNNAME_Record_UU, Record_UU); + } + + /** Get Record UUID. + @return Record UUID */ + public String getRecord_UU() + { + return (String)get_Value(COLUMNNAME_Record_UU); + } } \ No newline at end of file diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_PostIt.java b/org.adempiere.base/src/org/compiere/model/X_AD_PostIt.java index ee719c76e5..b8e53ec5a3 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_PostIt.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_PostIt.java @@ -30,7 +30,7 @@ public class X_AD_PostIt extends PO implements I_AD_PostIt, I_Persistent /** * */ - private static final long serialVersionUID = 20230409L; + private static final long serialVersionUID = 20230529L; /** Standard Constructor */ public X_AD_PostIt (Properties ctx, int AD_PostIt_ID, String trxName) @@ -186,6 +186,21 @@ public class X_AD_PostIt extends PO implements I_AD_PostIt, I_Persistent return ii.intValue(); } + /** Set Record UUID. + @param Record_UU Record UUID + */ + public void setRecord_UU (String Record_UU) + { + set_Value (COLUMNNAME_Record_UU, Record_UU); + } + + /** Get Record UUID. + @return Record UUID */ + public String getRecord_UU() + { + return (String)get_Value(COLUMNNAME_Record_UU); + } + /** Set Description. @param Text Description */ diff --git a/org.adempiere.base/src/org/compiere/model/X_CM_Chat.java b/org.adempiere.base/src/org/compiere/model/X_CM_Chat.java index dc28626fa8..b31998a9f9 100644 --- a/org.adempiere.base/src/org/compiere/model/X_CM_Chat.java +++ b/org.adempiere.base/src/org/compiere/model/X_CM_Chat.java @@ -31,7 +31,7 @@ public class X_CM_Chat extends PO implements I_CM_Chat, I_Persistent /** * */ - private static final long serialVersionUID = 20230409L; + private static final long serialVersionUID = 20230529L; /** Standard Constructor */ public X_CM_Chat (Properties ctx, int CM_Chat_ID, String trxName) @@ -43,7 +43,6 @@ public class X_CM_Chat extends PO implements I_CM_Chat, I_Persistent setCM_Chat_ID (0); setConfidentialType (null); setDescription (null); - setRecord_ID (0); } */ } @@ -57,7 +56,6 @@ public class X_CM_Chat extends PO implements I_CM_Chat, I_Persistent setCM_Chat_ID (0); setConfidentialType (null); setDescription (null); - setRecord_ID (0); } */ } @@ -71,7 +69,6 @@ public class X_CM_Chat extends PO implements I_CM_Chat, I_Persistent setCM_Chat_ID (0); setConfidentialType (null); setDescription (null); - setRecord_ID (0); } */ } @@ -85,7 +82,6 @@ public class X_CM_Chat extends PO implements I_CM_Chat, I_Persistent setCM_Chat_ID (0); setConfidentialType (null); setDescription (null); - setRecord_ID (0); } */ } @@ -307,4 +303,19 @@ public class X_CM_Chat extends PO implements I_CM_Chat, I_Persistent return 0; return ii.intValue(); } + + /** Set Record UUID. + @param Record_UU Record UUID + */ + public void setRecord_UU (String Record_UU) + { + set_ValueNoCheck (COLUMNNAME_Record_UU, Record_UU); + } + + /** Get Record UUID. + @return Record UUID */ + public String getRecord_UU() + { + return (String)get_Value(COLUMNNAME_Record_UU); + } } \ No newline at end of file diff --git a/org.adempiere.base/src/org/compiere/wf/MWFActivity.java b/org.adempiere.base/src/org/compiere/wf/MWFActivity.java index ac634aa72c..68860f5b92 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWFActivity.java +++ b/org.adempiere.base/src/org/compiere/wf/MWFActivity.java @@ -1163,7 +1163,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable note.setRecord(getAD_Table_ID(), getRecord_ID()); note.saveEx(); // Attachment - MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), get_TrxName()); + MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), note.getAD_Note_UU(), get_TrxName()); attachment.addEntry(report); attachment.setTextMsg(m_node.getName(true)); attachment.saveEx(); diff --git a/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java b/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java index 71d4273466..3152fc54fc 100644 --- a/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java +++ b/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java @@ -132,7 +132,7 @@ public class PipoDictionaryService implements IDictionaryService { // Add the attachment to the packin for possible reprocessing if (MSysConfig.getBooleanValue(MSysConfig.ATTACH_EMBEDDED_2PACK, true) || ! packIn.isSuccess()) { // TODO: This sometimes fails with error No archive storage provider found - because the IAttachmentStore required is still not loaded - MAttachment attachment = new MAttachment (adPackageImp.getCtx(), X_AD_Package_Imp_Proc.Table_ID, adPackageImp.getAD_Package_Imp_Proc_ID(), null); + MAttachment attachment = new MAttachment (adPackageImp.getCtx(), X_AD_Package_Imp_Proc.Table_ID, adPackageImp.getAD_Package_Imp_Proc_ID(), adPackageImp.getAD_Package_Imp_Proc_UU(), null); attachment.addEntry(packageFile); attachment.save(); // ignoring exceptions } diff --git a/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java b/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java index 4d79f28a9b..18894c0ffa 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java @@ -291,7 +291,7 @@ public class AlertProcessor extends AdempiereServer note.saveEx(); if (attachments.size() > 0) { // Attachment - MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), trx.getTrxName()); + MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), note.getAD_Note_UU(), trx.getTrxName()); attachment.setClientOrg(alert.getAD_Client_ID(), alert.getAD_Org_ID()); for (File f : attachments) { attachment.addEntry(f); diff --git a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java index d7f583ed61..4cd5a98820 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java @@ -258,7 +258,7 @@ public class Scheduler extends AdempiereServer note.saveEx(); String log = pi.getLogInfo(true); if (log != null && log.trim().length() > 0) { - MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null); + MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), note.getAD_Note_UU(), null); attachment.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID()); attachment.setTextMsg(schedulerName); attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8")); @@ -307,7 +307,7 @@ public class Scheduler extends AdempiereServer MAttachment attachment = null; if (fileList != null && !fileList.isEmpty()) { // Attachment - attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null); + attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), note.getAD_Note_UU(), null); attachment.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID()); attachment.setTextMsg(schedulerName); for (File entry : fileList) @@ -317,7 +317,7 @@ public class Scheduler extends AdempiereServer String log = pi.getLogInfo(true); if (log != null && log.trim().length() > 0) { if (attachment == null) { - attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null); + attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), note.getAD_Note_UU(), null); attachment.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID()); attachment.setTextMsg(schedulerName); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index dbc4d09c51..8d87d03f55 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -1152,9 +1152,10 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements public void onAttachment() { int record_ID = adTabbox.getSelectedGridTab().getRecord_ID(); + String recordUU = adTabbox.getSelectedGridTab().getRecord_UU(); if (logger.isLoggable(Level.INFO)) logger.info("Record_ID=" + record_ID); - if (record_ID == -1) // No Key + if (record_ID== -1 && Util.isEmpty(recordUU)) // No Key { return; } @@ -1168,7 +1169,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements }; // Attachment va = WAttachment win = new WAttachment ( curWindowNo, adTabbox.getSelectedGridTab().getAD_AttachmentID(), - adTabbox.getSelectedGridTab().getAD_Table_ID(), record_ID, null, listener); + adTabbox.getSelectedGridTab().getAD_Table_ID(), record_ID, recordUU, null, listener); win.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { @@ -1185,9 +1186,10 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements public void onChat() { int recordId = adTabbox.getSelectedGridTab().getRecord_ID(); - if (logger.isLoggable(Level.INFO)) logger.info("Record_ID=" + recordId); + String recordUU = adTabbox.getSelectedGridTab().getRecord_UU(); + if (logger.isLoggable(Level.INFO)) logger.info("Record_ID=" + recordId + ", Record_UU=" + recordUU); - if (recordId== -1) // No Key + if (recordId== -1 && Util.isEmpty(recordUU)) // No Key { return; } @@ -1211,7 +1213,8 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements } String description = infoName + ": " + infoDisplay; - WChat chat = new WChat(curWindowNo, adTabbox.getSelectedGridTab().getCM_ChatID(), adTabbox.getSelectedGridTab().getAD_Table_ID(), recordId, description, null); + WChat chat = new WChat(curWindowNo, adTabbox.getSelectedGridTab().getCM_ChatID(), adTabbox.getSelectedGridTab().getAD_Table_ID(), + recordId, recordUU, description, null); chat.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { @@ -1232,7 +1235,8 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements public void onPostIt() { int recordId = adTabbox.getSelectedGridTab().getRecord_ID(); - if (recordId== -1) // No Key + String recordUU = adTabbox.getSelectedGridTab().getRecord_UU(); + if (recordId== -1 && Util.isEmpty(recordUU)) // No Key { return; } @@ -1253,7 +1257,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements } String header = infoName + ": " + infoDisplay; - WPostIt postit = new WPostIt(header, adTabbox.getSelectedGridTab().getAD_PostIt_ID(), adTabbox.getSelectedGridTab().getAD_Table_ID(), recordId, null); + WPostIt postit = new WPostIt(header, adTabbox.getSelectedGridTab().getAD_PostIt_ID(), adTabbox.getSelectedGridTab().getAD_Table_ID(), recordId, recordUU, null); postit.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { @@ -2057,7 +2061,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements { canHaveAttachment = false; } - if (canHaveAttachment && adTabbox.getSelectedGridTab().getRecord_ID() == -1) // No Key + if (canHaveAttachment && adTabbox.getSelectedGridTab().getRecord_ID() == -1 && Util.isEmpty(adTabbox.getSelectedGridTab().getRecord_UU())) // No Key { canHaveAttachment = false; } @@ -2078,7 +2082,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements { canHaveChat = false; } - if (canHaveChat && adTabbox.getSelectedGridTab().getRecord_ID() == -1) // No Key + if (canHaveChat && adTabbox.getSelectedGridTab().getRecord_ID() == -1 && Util.isEmpty(adTabbox.getSelectedGridTab().getRecord_UU())) // No Key { canHaveChat = false; } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/LabelsSearchController.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/LabelsSearchController.java index b70cf9234d..bc0c91c46d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/LabelsSearchController.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/LabelsSearchController.java @@ -74,7 +74,7 @@ public class LabelsSearchController implements EventListener{ private ListModelList model; /** main layout **/ private Vlayout layout; - /** label window panel, provider for AD_Table_ID and Record_ID **/ + /** label window panel, provider for AD_Table_ID and Record_UU **/ private LabelsPanel labelsPanel; /** @@ -248,12 +248,13 @@ public class LabelsSearchController implements EventListener{ // Assign if (!MLabelAssignment.hasLabelAssignment(label.get_ID(), labelsPanel.getAD_Table_ID(), - labelsPanel.getRecord_ID())) { + labelsPanel.getRecord_UU())) { MLabelAssignment assign = new MLabelAssignment(Env.getCtx(), 0, null); assign.setAD_Org_ID(label.getAD_Org_ID()); assign.setAD_Label_ID(label.get_ID()); assign.setAD_Table_ID(labelsPanel.getAD_Table_ID()); assign.setRecord_ID(labelsPanel.getRecord_ID()); + assign.setRecord_UU(labelsPanel.getRecord_UU()); assign.saveEx(); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LabelsPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LabelsPanel.java index ce469fa012..df87064ce9 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LabelsPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LabelsPanel.java @@ -35,6 +35,8 @@ import org.adempiere.webui.component.Label; import org.adempiere.webui.component.ZkCssHelper; import org.compiere.model.MLabel; import org.compiere.model.MLabelAssignment; +import org.compiere.model.MTable; +import org.compiere.model.PO; import org.compiere.model.Query; import org.compiere.util.Env; import org.zkoss.zk.ui.Component; @@ -45,21 +47,45 @@ import org.zkoss.zul.Div; import org.zkoss.zul.Groupbox; public class LabelsPanel extends Div implements EventListener { - private static final long serialVersionUID = 2232899183255702050L; + /** + * + */ + private static final long serialVersionUID = 8776043844483214400L; + private AbstractADWindowContent abstractADWindowContent; private int AD_Table_ID; - private int Record_ID; + private int Record_ID; + private String Record_UU; /** * Standard constructor * @param abstractADWindowContent * @param AD_Table_ID * @param Record_ID + * @deprecated Use {@link LabelsPanel#LabelsPanel(AbstractADWindowContent, int, int, String)} instead */ + @Deprecated public LabelsPanel(AbstractADWindowContent abstractADWindowContent, int AD_Table_ID, int Record_ID) { + this(abstractADWindowContent, AD_Table_ID, Record_ID, null); + if (Record_ID > 0) { + MTable table = MTable.get(AD_Table_ID); + PO po = table.getPO(Record_ID, null); + this.Record_UU = po.get_UUID(); + } + } + + /** + * Standard constructor + * @param abstractADWindowContent + * @param AD_Table_ID + * @param Record_ID + * @param Record_UU + */ + public LabelsPanel(AbstractADWindowContent abstractADWindowContent, int AD_Table_ID, int Record_ID, String Record_UU) { this.abstractADWindowContent = abstractADWindowContent; this.AD_Table_ID = AD_Table_ID; this.Record_ID = Record_ID; + this.Record_UU = Record_UU; setStyle("padding:0px 5px;"); addEventListener(LabelsSearchController.ON_POST_SELECT_LABELITEM_EVENT, this); update(); @@ -81,6 +107,14 @@ public class LabelsPanel extends Div implements EventListener { return Record_ID; } + /** + * Get current record uuid + * @return + */ + public String getRecord_UU() { + return Record_UU; + } + @Override public void onEvent(Event event) throws Exception { if (event.getName().equals(LabelsSearchController.ON_POST_SELECT_LABELITEM_EVENT)) { @@ -98,8 +132,8 @@ public class LabelsPanel extends Div implements EventListener { // Query List assignmentsList = new Query(Env.getCtx(), - MLabelAssignment.Table_Name, "AD_Table_ID=? AND Record_ID=?", null) - .setParameters(AD_Table_ID, Record_ID) + MLabelAssignment.Table_Name, "AD_Table_ID=? AND Record_UU=?", null) + .setParameters(AD_Table_ID, Record_UU) .setOrderBy(MLabelAssignment.COLUMNNAME_Created) .list(); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java index be2e635918..b2487b65b6 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java @@ -94,7 +94,7 @@ public class WAttachment extends Window implements EventListener /** * */ - private static final long serialVersionUID = -710884973406502168L; + private static final long serialVersionUID = -8534334828539841412L; private static final CLogger log = CLogger.getCLogger(WAttachment.class); @@ -170,12 +170,13 @@ public class WAttachment extends Window implements EventListener * @param Record_ID record key * @param trxName transaction */ + @Deprecated public WAttachment( int WindowNo, int AD_Attachment_ID, int AD_Table_ID, int Record_ID, String trxName) { - this(WindowNo, AD_Attachment_ID, AD_Table_ID, Record_ID, trxName, (EventListener)null); + this(WindowNo, AD_Attachment_ID, AD_Table_ID, Record_ID, null, trxName, (EventListener)null); } - + /** * Constructor. * loads Attachment, if ID <> 0 @@ -186,13 +187,31 @@ public class WAttachment extends Window implements EventListener * @param trxName transaction * @param eventListener */ + @Deprecated public WAttachment( int WindowNo, int AD_Attachment_ID, - int AD_Table_ID, int Record_ID, String trxName, EventListener eventListener) + int AD_Table_ID, int Record_ID, String trxName, EventListener eventListener) + { + this(WindowNo, AD_Attachment_ID, AD_Table_ID, Record_ID, null, trxName, eventListener); + } + + /** + * Constructor. + * loads Attachment, if ID <> 0 + * @param WindowNo window no + * @param AD_Attachment_ID attachment + * @param AD_Table_ID table + * @param Record_ID record key + * @param Record_UU record UUID + * @param trxName transaction + * @param eventListener + */ + public WAttachment( int WindowNo, int AD_Attachment_ID, + int AD_Table_ID, int Record_ID, String Record_UU, String trxName, EventListener eventListener) { super(); maxPreviewSize = MSysConfig.getIntValue(MSysConfig.ZK_MAX_ATTACHMENT_PREVIEW_SIZE, 1048576, Env.getAD_Client_ID(Env.getCtx())); - if (log.isLoggable(Level.CONFIG)) log.config("ID=" + AD_Attachment_ID + ", Table=" + AD_Table_ID + ", Record=" + Record_ID); + if (log.isLoggable(Level.CONFIG)) log.config("ID=" + AD_Attachment_ID + ", Table=" + AD_Table_ID + ", Record=" + Record_ID + ", RecordUU=" + Record_UU); m_WindowNo = WindowNo; this.addEventListener(DialogEvents.ON_WINDOW_CLOSE, this); @@ -215,7 +234,7 @@ public class WAttachment extends Window implements EventListener if (AD_Attachment_ID > 0) m_attachment = new MAttachment (Env.getCtx(), AD_Attachment_ID, trxName); else - m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName); + m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, Record_UU, trxName); loadAttachments(); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LabelAction.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LabelAction.java index 9759dd15c6..ad17f67da8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LabelAction.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LabelAction.java @@ -50,7 +50,8 @@ public class LabelAction { this.panel = panel; int AD_Table_ID = panel.getActiveGridTab().getAD_Table_ID(); int Record_ID = panel.getActiveGridTab().getRecord_ID(); - labelsPanel = new LabelsPanel(panel, AD_Table_ID, Record_ID); + String Record_UU = panel.getActiveGridTab().getRecord_UU(); + labelsPanel = new LabelsPanel(panel, AD_Table_ID, Record_ID, Record_UU); } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java index 17b3681770..ccc5dbeef0 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java @@ -66,8 +66,8 @@ public class WChat extends Window implements EventListener, DialogEvents /** * */ - private static final long serialVersionUID = -5265835393257520762L; - + private static final long serialVersionUID = 8839053486411714175L; + private static final String USER_LABEL_STYLE = "font-weight: bold"; private static final String TIME_LABEL_STYLE = "font-size:xx-small;color:gray;margin-left:20px"; @@ -78,11 +78,12 @@ public class WChat extends Window implements EventListener, DialogEvents * @param CM_Chat_ID chat * @param AD_Table_ID table * @param Record_ID record key + * @param Record_UU record UUID * @param Description description * @param trxName transaction */ public WChat (int WindowNo, int CM_Chat_ID, - int AD_Table_ID, int Record_ID, String Description, + int AD_Table_ID, int Record_ID, String Record_UU, String Description, String trxName) { super(); @@ -104,7 +105,7 @@ public class WChat extends Window implements EventListener, DialogEvents if (CM_Chat_ID > 0) m_chat = new MChat (Env.getCtx(), CM_Chat_ID, trxName); else - m_chat = new MChat (Env.getCtx(), AD_Table_ID, Record_ID, Description, trxName); + m_chat = new MChat (Env.getCtx(), AD_Table_ID, Record_ID, Record_UU, Description, trxName); loadChat(); // } // Attachment diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPostIt.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPostIt.java index eeccb43606..cc121902eb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPostIt.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPostIt.java @@ -41,8 +41,11 @@ import org.zkoss.zul.Separator; * */ public class WPostIt extends Window implements EventListener{ + /** + * + */ + private static final long serialVersionUID = -9092535255629718710L; - private static final long serialVersionUID = -3852236029054284848L; private boolean editable; private int maxSize; private String note; @@ -61,9 +64,10 @@ public class WPostIt extends Window implements EventListener{ * @param postItID * @param tableID * @param recordID + * @param recordUU record UUID * @param trxName */ - public WPostIt(String title, int postItID, int tableID, int recordID, /*String created, String updated,*/ String trxName) { + public WPostIt(String title, int postItID, int tableID, int recordID, String recordUU, String trxName) { super(); setTitle(title); this.editable = true; @@ -72,7 +76,7 @@ public class WPostIt extends Window implements EventListener{ if (postItID > 0) m_postIt = new MPostIt (Env.getCtx(), postItID, trxName); else - m_postIt = new MPostIt (Env.getCtx(), tableID, recordID, trxName); + m_postIt = new MPostIt (Env.getCtx(), tableID, recordID, recordUU, trxName); String created = null; if (m_postIt.getAD_PostIt_ID() > 0)