Skip to content
Snippets Groups Projects
Commit 94e4dbca authored by Jessica Luginger's avatar Jessica Luginger
Browse files

merged 2020.2.3 into 1071080_ProdukteInAngebotBelegMaskeHinzufügen

parents 05410845 d0dd0fe3
No related branches found
No related tags found
No related merge requests found
Showing
with 222 additions and 165 deletions
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<changeSet author="s.pongratz" id="28627941-6c9b-46e8-922a-b4660b33723c">
<changeSet author="s.pongratz" id="c30bc71b-fcef-4ae6-9356-207adaca9dbd">
<!--Atribute-->
<insert tableName="AB_KEYWORD_ATTRIBUTE">
<column name="AB_KEYWORD_ATTRIBUTEID" value="08fcb5db-531d-4a83-8c6e-b9c9c95dcb16"/>
......
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<changeSet author="s.garb" id="995a11c7-fb16-4c33-b5ad-0c35f44905c3">
<addColumn tableName="OFFER">
<column name="DISCOUNT" type="NUMERIC(14,2)" />
<column name="DISCOUNTED_NET" type="NUMERIC(14,2)" />
</addColumn>
</changeSet>
<changeSet author="s.garb" id="801708bd-91f0-4468-bed9-0bbab7e46997">
<addColumn tableName="OFFER">
<column name="DISCOUNTED_VAT" type="NUMERIC(14,2)" />
</addColumn>
</changeSet>
</databaseChangeLog>
\ No newline at end of file
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<include file="addColumnOffer.xml" relativeToChangelogFile="true" />
</databaseChangeLog>
\ No newline at end of file
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<include relativeToChangelogFile="true" file="Offer/changelog.xml"/>
</databaseChangeLog>
\ No newline at end of file
......@@ -18,6 +18,7 @@
<include relativeToChangelogFile="true" file="basic/2020.2.0/changelog.xml"/>
<include relativeToChangelogFile="true" file="basic/2020.2.1/changelog.xml"/>
<include relativeToChangelogFile="true" file="basic/2020.2.2/changelog.xml"/>
<include relativeToChangelogFile="true" file="basic/2020.2.3/changelog.xml"/>
<!--enable this only when you definetly want to overwrite the existing data with demo records:-->
<!--<include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>-->
......
......@@ -3108,6 +3108,48 @@
<title></title>
<description></description>
</entityFieldDb>
<entityFieldDb>
<name>DISCOUNT</name>
<dbName></dbName>
<primaryKey v="false" />
<columnType v="3" />
<size v="14" />
<scale v="2" />
<notNull v="false" />
<isUnique v="false" />
<index v="false" />
<documentation></documentation>
<title></title>
<description></description>
</entityFieldDb>
<entityFieldDb>
<name>DISCOUNTED_NET</name>
<dbName></dbName>
<primaryKey v="false" />
<columnType v="3" />
<size v="14" />
<scale v="2" />
<notNull v="false" />
<isUnique v="false" />
<index v="false" />
<documentation></documentation>
<title></title>
<description></description>
</entityFieldDb>
<entityFieldDb>
<name>DISCOUNTED_VAT</name>
<dbName></dbName>
<primaryKey v="false" />
<columnType v="3" />
<size v="14" />
<scale v="2" />
<notNull v="false" />
<isUnique v="false" />
<index v="false" />
<documentation></documentation>
<title></title>
<description></description>
</entityFieldDb>
</entityFields>
</entityDb>
<entityDb>
......
......@@ -38,10 +38,6 @@
<name>Task</name>
<kind v="10077" />
</entityNode>
<entityNode>
<name>Favorite</name>
<kind v="10077" />
</entityNode>
</childNodes>
</entityNode>
</childNodes>
......
......@@ -4,11 +4,22 @@ import("system.result");
var res = {
"Offer": {},
"Order": {
"setGroupBy":"ORDERTYPE"
"setGroupBy":"ORDERTYPE",
"groupByKeyword":"OrderType"
},
"Contract": {},
"SupportTicket": {},
"Campaign": {}
}
"SupportTicket": {
"subContext":"TaskLink",
"childField":"TASK_ID",
"parentField":"TASK_TASKID",
"contactIdField":"OBJECT_ROWID"
},
"Campaign": {
"subContext":"CampaignParticipant",
"childField":"CAMPAIGN_ID",
"parentField":"CAMPAIGNID",
"contactIdField":"CONTACT_ID"
}
};
result.string(JSON.stringify(res))
\ No newline at end of file
result.string(JSON.stringify(res));
\ No newline at end of file
......@@ -4,4 +4,4 @@ import("system.result");
import("MSTeams_lib");
var isTeamsEnabled = vars.get("$param.ObjectId_param") in MSTeamsUtils.getTeamLinkContexts() && MSTeamsUtils.isTeamsEnabled();
result.string(/*isTeamsEnabled ? neon.COMPONENTSTATE_EDITABLE : */neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
result.string(isTeamsEnabled ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
import("Sql_lib");
import("system.vars");
import("Offer_lib");
OfferUtils.createNewOffer(null, null, null, vars.get("$field.ACTIVITYID"));
\ No newline at end of file
var activityId = vars.get("$field.ACTIVITYID");
var activityLinks = newSelect("ACTIVITYLINK.OBJECT_TYPE, ACTIVITYLINK.OBJECT_ROWID")
.from("ACTIVITYLINK")
.where("ACTIVITYLINK.ACTIVITY_ID", activityId)
.and("ACTIVITYLINK.OBJECT_TYPE", ["Person", "Organisation", "Salesproject"], SqlBuilder.IN())
.table();
//make a map from the 2d-array to easily access the ids by objectType
var linkMap = new Map(activityLinks);
//if we only have one Person: that person is the contact.
//otherwise: we check for organisations: if we only have one then we use that one.
//same logic for salesprojects: if we have only one: use that one
var contactId = linkMap.get("Person") || linkMap.get("Organisation");
var salesprojectId = linkMap.get("Salesproject");
OfferUtils.createNewOffer("Salesproject", salesprojectId, contactId, activityId);
\ No newline at end of file
import("system.tools");
import("system.SQLTYPES");
import("system.db");
import("system.datetime");
......@@ -8,45 +9,49 @@ import("Sql_lib");
import("system.calendars");
import("Calendar_lib");
var pFilter = CalendarUtil.reset_filterEvent();
var conditions = [];
var conditioncount = 0;
var user = undefined;
var stati = [];
var entries = [];
var calendarId = tools.getCurrentUser()[tools.PARAMS][tools.CALENDARID];
if(calendarId != "" && calendarId != null && calendarId != undefined)
{
var pFilter = CalendarUtil.reset_filterEvent();
var conditions = [];
var conditioncount = 0;
var user = undefined;
var stati = [];
var entries = [];
var startnumber = Number(vars.get("$sys.date"));
var endnumber = startnumber + 43200000 ;
var startnumber = Number(vars.get("$sys.date"));
var endnumber = startnumber + 43200000 ;
var start = startnumber + "";
var end = endnumber + "";
var start = startnumber + "";
var end = endnumber + "";
if ( pFilter.tentative == "true" )
stati.push(calendars.STATUS_TENTATIVE);
if ( pFilter.tentative == "true" )
stati.push(calendars.STATUS_TENTATIVE);
if ( pFilter.cancelled == "true" )
stati.push(calendars.STATUS_CANCELLED);
if ( pFilter.cancelled == "true" )
stati.push(calendars.STATUS_CANCELLED);
if ( pFilter.confirmed == "true" )
stati.push(CalendarUtil.mapCalendarStatus(calendars.STATUS_CONFIRMED, calendars.getBackendType() ));
if ( pFilter.confirmed == "true" )
stati.push(CalendarUtil.mapCalendarStatus(calendars.STATUS_CONFIRMED, calendars.getBackendType() ));
if (CalendarUtil.getCalendarSystemType(calendars.VEVENT) == calendars.BACKEND_EXCHANGEWS && pFilter.free == "true")
stati.push(calendars.STATUS_FREE);
if (CalendarUtil.getCalendarSystemType(calendars.VEVENT) == calendars.BACKEND_EXCHANGEWS && pFilter.free == "true")
stati.push(calendars.STATUS_FREE);
if ( pFilter.user != "" )
user = (pFilter.user).trim();
if ( pFilter.user != "" )
user = (pFilter.user).trim();
for ( var z = 0; z < stati.length; z++ )
CalendarUtil.addEntryCondition(conditions, ++conditioncount,
{
TYPE: calendars.VEVENT,
START: start,
END: end,
USER: user,
STATUS: stati[z]
});
for ( var z = 0; z < stati.length; z++ )
CalendarUtil.addEntryCondition(conditions, ++conditioncount,
{
TYPE: calendars.VEVENT,
START: start,
END: end,
USER: user,
STATUS: stati[z]
});
conditions["COUNT"] = String(conditioncount);
entries = calendars.getEntries(conditions);
conditions["COUNT"] = String(conditioncount);
entries = calendars.getEntries(conditions);
result.string(entries.length);
result.string(entries.length);
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import("system.util");
import("system.mail");
import("DocumentTemplate_lib");
import("Entity_lib");
import("EmailUtil_lib");
if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
{
......
......@@ -80,14 +80,6 @@
<entityProvider>
<name>CampaignCosts</name>
<documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc</documentation>
<dependencies>
<entityDependency>
<name>7131288b-af5c-4914-96f5-c5d70217fc23</name>
<entityName>Campaign_entity</entityName>
<fieldName>CampaignCosts</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>CampaignStepId_param</name>
......@@ -107,24 +99,18 @@
<expose v="false" />
</entityParameter>
</children>
</entityProvider>
<entityProvider>
<name>StepCosts</name>
<documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc</documentation>
<dependencies>
<entityDependency>
<name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name>
<entityName>CampaignStep_entity</entityName>
<fieldName>CampaignStepCosts</fieldName>
<isConsumer v="false" />
</entityDependency>
<entityDependency>
<name>2a92b738-c0bb-4c14-9915-aff9e18effaf</name>
<name>7131288b-af5c-4914-96f5-c5d70217fc23</name>
<entityName>Campaign_entity</entityName>
<fieldName>CampaignStepCosts</fieldName>
<fieldName>CampaignCosts</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
</entityProvider>
<entityProvider>
<name>StepCosts</name>
<documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc</documentation>
<children>
<entityParameter>
<name>CampaignStepId_param</name>
......@@ -144,6 +130,20 @@
<expose v="false" />
</entityParameter>
</children>
<dependencies>
<entityDependency>
<name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name>
<entityName>CampaignStep_entity</entityName>
<fieldName>CampaignStepCosts</fieldName>
<isConsumer v="false" />
</entityDependency>
<entityDependency>
<name>2a92b738-c0bb-4c14-9915-aff9e18effaf</name>
<entityName>Campaign_entity</entityName>
<fieldName>CampaignStepCosts</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
</entityProvider>
<entityConsumer>
<name>Campaigns</name>
......@@ -155,35 +155,35 @@
</entityConsumer>
<entityConsumer>
<name>CampaignSteps</name>
<dependency>
<name>dependency</name>
<entityName>CampaignStep_entity</entityName>
<fieldName>CampaignSteps</fieldName>
</dependency>
<children>
<entityParameter>
<name>campaignId_param</name>
<valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityConsumer>
<name>KeywordCampaignManagementCostCategory</name>
<dependency>
<name>dependency</name>
<entityName>KeywordEntry_entity</entityName>
<fieldName>SpecificContainerKeywords</fieldName>
<entityName>CampaignStep_entity</entityName>
<fieldName>CampaignSteps</fieldName>
</dependency>
</entityConsumer>
<entityConsumer>
<name>KeywordCampaignManagementCostCategory</name>
<children>
<entityParameter>
<name>ContainerName_param</name>
<valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>ExcludedKeyIdsSubquery_param</name>
<valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
<name>BlacklistIds_param</name>
<valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/blacklistids_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
<dependency>
<name>dependency</name>
<entityName>KeywordEntry_entity</entityName>
<fieldName>SpecificContainerKeywords</fieldName>
</dependency>
</entityConsumer>
<entityParameter>
<name>CampaignId_param</name>
......
......@@ -12,9 +12,9 @@ var cond = newSelect("CATEGORY")
if (vars.get("$field.CAMPAIGNSTEP_ID"))
cond.andIfSet("CAMPAIGNCOST.CAMPAIGNSTEP_ID", "$field.CAMPAIGNSTEP_ID");
else
cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null")
cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null");
if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
cond.andIfSet("CAMPAIGNCOST.CAMPAIGNCOSTID", "$field.CAMPAIGNCOSTID", SqlBuilder.NOT_EQUAL());
result.string(cond.toString());
\ No newline at end of file
result.string(JSON.stringify(cond.arrayColumn()));
\ No newline at end of file
import("system.result");
import("Sql_lib");
result.string(newSelect("CAMPAIGNSTEP.NAME").from("CAMPAIGNSTEP").where("CAMPAIGNSTEP.CAMPAIGNSTEPID = CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID").toString());
\ No newline at end of file
import("system.result");
import("Sql_lib");
result.string(newSelect("COUNT(*)").from("CAMPAIGNPARTICIPANT", "p1").where("p1.CAMPAIGNSTEP_ID = CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID").toString());
\ No newline at end of file
......@@ -81,17 +81,17 @@
</entityField>
<entityConsumer>
<name>CampaignStatusKeyword</name>
<dependency>
<name>dependency</name>
<entityName>KeywordEntry_entity</entityName>
<fieldName>SpecificContainerKeywords</fieldName>
</dependency>
<children>
<entityParameter>
<name>ContainerName_param</name>
<valueProcess>%aditoprj%/entity/CampaignPlanning_entity/entityfields/campaignstatuskeyword/children/containername_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
<dependency>
<name>dependency</name>
<entityName>KeywordEntry_entity</entityName>
<fieldName>SpecificContainerKeywords</fieldName>
</dependency>
</entityConsumer>
<entityProvider>
<name>#PROVIDER_AGGREGATES</name>
......@@ -99,58 +99,6 @@
</entityProvider>
</entityFields>
<recordContainers>
<dbRecordContainer>
<name>recordContainer</name>
<alias>Data_alias</alias>
<fromClauseProcess>%aditoprj%/entity/CampaignPlanning_entity/recordcontainers/recordcontainer/fromClauseProcess.js</fromClauseProcess>
<orderClauseProcess>%aditoprj%/entity/CampaignPlanning_entity/recordcontainers/recordcontainer/orderClauseProcess.js</orderClauseProcess>
<linkInformation>
<linkInformation>
<name>091a323d-d1e8-4eec-8f33-0c91bc7f62af</name>
<tableName>CAMPAIGN</tableName>
<primaryKey>CAMPAIGNID</primaryKey>
<isUIDTable v="false" />
<readonly v="true" />
</linkInformation>
<linkInformation>
<name>2df8e267-6c25-4bae-bd0f-2b7b4399cc2b</name>
<tableName>CAMPAIGNSTEP</tableName>
<primaryKey>CAMPAIGNSTEPID</primaryKey>
<isUIDTable v="true" />
<readonly v="false" />
</linkInformation>
</linkInformation>
<recordFieldMappings>
<dbRecordFieldMapping>
<name>CAMPAIGN_ID.value</name>
<recordfield>CAMPAIGN.CAMPAIGNID</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>DATE_END.value</name>
<recordfield>CAMPAIGNSTEP.DATE_END</recordfield>
<isFilterable v="true" />
<isLookupFilter v="true" />
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>DATE_START.value</name>
<recordfield>CAMPAIGNSTEP.DATE_START</recordfield>
<isFilterable v="true" />
<isLookupFilter v="true" />
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>PREDECESSOR_STEP_ID.value</name>
<recordfield>CAMPAIGNSTEP.PREDECESSORSTEP_ID</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>STEP_DESCRIPTION.value</name>
<recordfield>CAMPAIGNSTEP.DESCRIPTION</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>STEP_ID.value</name>
<recordfield>CAMPAIGNSTEP.CAMPAIGNSTEPID</recordfield>
</dbRecordFieldMapping>
</recordFieldMappings>
</dbRecordContainer>
<jDitoRecordContainer>
<name>jditoRecordContainer</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
......
import("system.logging");
import("JditoFilter_lib");
import("system.util");
import("system.db");
......@@ -26,34 +27,47 @@ if (isMariaDB)
columnName = "\`NAME\`";
}
var stepsRows = stepCondition.select("CAMPAIGNSTEPID, CAMPAIGNSTEP."+ columnName + ", CAMPAIGNSTEP.PREDECESSORSTEP_ID,"
stepCondition.select("CAMPAIGNSTEPID, CAMPAIGNSTEP."+ columnName + ", CAMPAIGNSTEP.PREDECESSORSTEP_ID,"
+ " CAMPAIGNSTEP.DESCRIPTION, CAMPAIGNSTEP.DATE_START, CAMPAIGNSTEP.DATE_END, CAMPAIGNID, CAMPAIGN."+ columnName +", CAMPAIGN.STATUS")
.from("CAMPAIGN")
.join("CAMPAIGNSTEP", "CAMPAIGN.CAMPAIGNID = CAMPAIGNSTEP.CAMPAIGN_ID")
.orderBy("SORTING")
.table();
.join("CAMPAIGNSTEP", "CAMPAIGN.CAMPAIGNID = CAMPAIGNSTEP.CAMPAIGN_ID");
if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
stepCondition.and("CAMPAIGNSTEP.CAMPAIGNSTEPID", vars.get("$local.idvalues"), SqlBuilder.IN());
stepsRows = stepsRows.map(function ([stepId, stepName, predecessorId, desc, stepStartDate, stepEndDate, campaignId, campaignName, campaignStatus])
var stepsRows = stepCondition.orderBy("SORTING").table();
//this can happen when not a CampaignStep, but a Campaign node was selected
if(stepsRows.length == 0 && vars.get("$local.idvalues") && newSelect("count(*)").from("CAMPAIGN").where("CAMPAIGN.CAMPAIGNID", vars.get("$local.idvalues")).cell() > 0)
{
if (!campaignRows[campaignId])
{
let startDate = CampaignUtils.getCampaignStartDate(campaignId);
let endDate = CampaignUtils.getCampaignEndDate(campaignId);
campaignRows[campaignId] = [campaignId, campaignName, null, null, startDate, endDate, campaignId, TARGET_CONTEXT_ROOT_ELEMENT, campaignStatus];
}
stepIds[stepId] = true;
return [stepId, stepName, predecessorId || campaignId, desc, stepStartDate, stepEndDate, campaignId, TARGET_CONTEXT_ELEMENT, campaignStatus];
});
stepsRows = [[vars.get("$local.idvalues"), "", "", "", "", "", vars.get("$local.idvalues"), "", ""]]
}
//replace all predecessor ids that are not in the tree with the campaign id
stepsRows.forEach(function (row)
if(!vars.get("$local.idvalues"))
{
if (!(stepIds[row[2]]))
row[2] = row[6];
});
stepsRows = stepsRows.map(function ([stepId, stepName, predecessorId, desc, stepStartDate, stepEndDate, campaignId, campaignName, campaignStatus])
{
if (!campaignRows[campaignId])
{
let startDate = CampaignUtils.getCampaignStartDate(campaignId);
let endDate = CampaignUtils.getCampaignEndDate(campaignId);
campaignRows[campaignId] = [campaignId, campaignName, null, null, startDate, endDate, campaignId, TARGET_CONTEXT_ROOT_ELEMENT, campaignStatus];
}
stepIds[stepId] = true;
return [stepId, stepName, predecessorId || campaignId, desc, stepStartDate, stepEndDate, campaignId, TARGET_CONTEXT_ELEMENT, campaignStatus];
});
//convert the object to an array
campaignRows = Object.keys(campaignRows).map(function (id) {return campaignRows[id];});
//replace all predecessor ids that are not in the tree with the campaign id
stepsRows.forEach(function (row)
{
if (!(stepIds[row[2]]))
row[2] = row[6];
});
result.object(campaignRows.concat(stepsRows))
//convert the object to an array
campaignRows = Object.keys(campaignRows).map(function (id) {return campaignRows[id];});
stepsRows = campaignRows.concat(stepsRows);
}
result.object(stepsRows);
import("system.result");
result.string("CAMPAIGN join CAMPAIGNSTEP on CAMPAIGN.CAMPAIGNID = CAMPAIGNSTEP.CAMPAIGN_ID")
\ No newline at end of file
import("system.result");
import("system.db");
result.object({"CAMPAIGNSTEP.SORTING": db.ASCENDING});
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment