E.g. In the Stamm window, create a new Protokoll record from within the Protokoll tab.
This works a little differently to a simple create from the desktop mask as it needs to establish the link between Protokoll and Stamm using the Stamm_ID field in Protokoll.
Create your new dialog window using the template
newRecordDialog
Add your DSO and Form and create your links.
In the New Create Dialog Window change the attributes in swattoolbar/SimpleSwatToolbar
EventToolbarGo: $akioma.osiv.saveRecordInDialogAndClose (self)
/* * Used in EventToolbarGo Attribute for dialog Windows. * Saves a record and closed the dialog * Note: This is an alternative to SaveNewRecord which * automatically saves the change, closes the dialog and * opens the record in a new details window. */ akioma.osiv.saveRecordInDialogAndClose = function(self) { console.log(self,'saveRecordInDialogAndClose'); var oBE = self.container.getLink('PRIMARYSDO:TARGET').controller; //Find record and Save it oBE.updateRecord({}); oBE.cleanSaveChangesOnceEvts(); oBE.addAfterSaveChangesOnceCallback(function(success){ // Close Dialogbox if(success && self.container.controller && self.container.controller.close) self.container.controller.close(); }); };??
In the Main calling window (In this case sStammDetailWindow) create a NEW menu ribbon option:
Do this using the Menu Maintenance and Menu Functions as normal in SmartFramework Menu
Action Type: RUN
Action Parameter: $ akioma.osiv.openNewRecordDialogFK(self,'sProtokollCreateDialogWindow','$ akioma.osiv.setForeignKeyCalcMethodStamm_ID (self)')
Where akioma.osiv.openNewRecordDialogFK I have created in Generic-record-handlings.js It saves the record, checks for errors, and if there are none closes the Dialog Window.
'sProtokollCreateDialogWindow Is the name of your NewRecord dialog window
akioma.osiv.setForeignKeyCalcMethodStamm_ID (self)') Is a JS code to set the Stamm_ID in the Initial values If you need another field, then create your own method.
Set Foreign-Keys for Linking records
// call method for Stamm_ID for foreignkeys new record in panel akioma.osiv.setForeignKeyCalcMethodStamm_ID = function(self){ var aForeignKeys = [{ name: 'Stamm_ID', value: "" + self.container.getLink("PRIMARYSDO:TARGET").getValue("stamm_id") }]; return aForeignKeys; };
Refreshing the Grid
In order that the ProtokollQuery Grid is updated when a new record is created do the following.
In the main window,, in this case sStammDetailWindow, find the Protokoll DSO and Add an EventAfterSave: $ akioma.osiv.RefreshProtokollQuery(self)
//Refresh ProtokollQuery Browse z.b. nach Create, Update, Kopieren, L??schen akioma.osiv.RefreshProtokollQuery = function(self){ akioma.eventEmitter.emit(["dataChanged", 'eProtokollQuery']); };
Save
/** * Used in menu function to save the Protokoll record from the Stamm Ribbon menu */ akioma.osiv.ProtokollSave = function(self){ var oBE = self.container.getObject('dProtokollDSO'); // update oBE.controller.updateRecord({}); };
Copy
/** * Used in menu function to copy the Protokoll record from the Stamm Ribbon menu */ akioma.osiv.ProtokollKopieren = function(ribbon){ console.log("ProtokollKopieren"); var oBE = ribbon.container.getObject('dProtokollDSO'); // Copy //Set the initial values akioma.osiv.setForeignKeyCalcMethodStamm_ID(ribbon); //launch a container var cSelectedHdl = oBE.getValue('selfhdl'); var cRepoName = 'sProtokollCreateDialogWindow'; var promise = app.controller.launchContainer( { proc: "launchContainer.r", para: "RunFile=" + cRepoName + "&Page=*", data: true, async: true } ); promise.done(function(oRes){ var BE = oRes.dynObject.getLink("PRIMARYSDO:TARGET").controller; BE.stop = true; // wait for catalog load and then getInitialValues copyRecord BE.addAfterCatalogAdd(function(){ BE.copyRecord(cSelectedHdl); }); }); };
Delete
/** * Used in menu function to save the Protokoll record from the Stamm Ribbon menu */ akioma.osiv.ProtokollDelete = function(Ribbon){ console.log ("ProtokollDelete"); // Find Protokoll const oBE = Ribbon.container.getObject('dProtokollDSO'); var InPapierkorb = oBE.getValue('geloescht'); if (InPapierkorb != true) { akioma.message("L??schen nicht m??glich weil Protokoll ist nicht im Papierkorb!"); return; }; // Delete record // oBE.controller.deleteRecord({}); akioma.osiv.deleteRecord (oBE); };