/o//commerce-media/accounts/-1/images/18606790?download=true
DataSync (Entreprise)
DXP App
DataSync allows you to load your data without any difficulty and help
you keep it up to date. The competing products are not as complete as DataSync:
* Resource importer is too limited in its support :
* LAR you cannot control data before import
* Site initializer asks you to do Java classes to manage data
Data Sync solves all these issues and improves your experience with data loading
Featured headlights :
* Human readable: your data is important so it's better to know what you are sending
* Delta is the only way: when a data has already been loaded, why start again if nothing has changed? DataSync does it only when it's useful!
* Wide variety of managed situations: deleted data to restore, data to be initialized without updating, partial update of data, ...
* Clear separation of descriptors from your data and associated binary data
* 17 types of automatic relations are possible to generate dynamic links when importing data, etc.
Supported data:
* Web content : Folders, Journal Articles, Structures, Templates
* Documents and Media : Folders, Documents, Documents Types, Metadata sets
* Pages : Public & Private pages, Child pages, LayoutSet, Page templates
* Messages boards : Categories, Threads
* Categorization : Vocabularies, Categories, Child categories, Tags
* Sites : Unlimited sites and theirs childs (with Guest and Global), Site templates
* Administration : Users, Roles, User Groups, Organizations, Owners
* Portal : Unlimited instances, Portal preferences, Custom fields, Application display templates DataSync vous permet de charger vos données sans aucune difficulté et de vous aider à les maintenir à jour dans le temps. Les produits concurrents ne sont pas aussi complet que celui ci :
* Resource importer est trop limité dans son support
* LAR ne permet de contrôler ses données avant un import
* Site initializer vous demande de faire des classes Java pour gérer des données
Data Sync résout toutes ces problématiques et améliore encore plus votre expérience d’importation des données
Fonctionnalités phares :
* Human readable : vos données sont très importantes, avec DataSync vous en maitrisez complément l'importation.
* Delta is the only way : lorsqu’une donnée a déjà été chargée, pourquoi recommencer si rien n’a changé ? DataSync ne le fait que lorsque c’est utile !
* Presque toutes les situations d'importations sont gérées : données supprimées à restaurer, données à initialiser sans mise à jour, mise à jour partielle de données, etc.
* Séparation claire des descripteurs des données et des données binaires associées
* 17 types de relation automatique sont possibles afin de générer des liaisons dynamiques lors de l’import des données
Données supportées :
* Web content : Folders, Journal Articles, Structures, Templates
* Documents and Media : Folders, Documents, Documents Types, Metadata sets
* Pages : Public & Private pages, Child pages, LayoutSet, Page templates
* Messages boards : Categories, Threads
* Categorization : Vocabularies, Categories, Child categories, Tags
* Sites : Unlimited sites and theirs childs (with Guest and Global), Site templates
* Administration : Users, Roles, User Groups, Organizations, Owners
* Portal : Unlimited instances, Portal preferences, Custom fields, Application display templates
* Resource importer is too limited in its support :
* LAR you cannot control data before import
* Site initializer asks you to do Java classes to manage data
Data Sync solves all these issues and improves your experience with data loading
Featured headlights :
* Human readable: your data is important so it's better to know what you are sending
* Delta is the only way: when a data has already been loaded, why start again if nothing has changed? DataSync does it only when it's useful!
* Wide variety of managed situations: deleted data to restore, data to be initialized without updating, partial update of data, ...
* Clear separation of descriptors from your data and associated binary data
* 17 types of automatic relations are possible to generate dynamic links when importing data, etc.
Supported data:
* Web content : Folders, Journal Articles, Structures, Templates
* Documents and Media : Folders, Documents, Documents Types, Metadata sets
* Pages : Public & Private pages, Child pages, LayoutSet, Page templates
* Messages boards : Categories, Threads
* Categorization : Vocabularies, Categories, Child categories, Tags
* Sites : Unlimited sites and theirs childs (with Guest and Global), Site templates
* Administration : Users, Roles, User Groups, Organizations, Owners
* Portal : Unlimited instances, Portal preferences, Custom fields, Application display templates DataSync vous permet de charger vos données sans aucune difficulté et de vous aider à les maintenir à jour dans le temps. Les produits concurrents ne sont pas aussi complet que celui ci :
* Resource importer est trop limité dans son support
* LAR ne permet de contrôler ses données avant un import
* Site initializer vous demande de faire des classes Java pour gérer des données
Data Sync résout toutes ces problématiques et améliore encore plus votre expérience d’importation des données
Fonctionnalités phares :
* Human readable : vos données sont très importantes, avec DataSync vous en maitrisez complément l'importation.
* Delta is the only way : lorsqu’une donnée a déjà été chargée, pourquoi recommencer si rien n’a changé ? DataSync ne le fait que lorsque c’est utile !
* Presque toutes les situations d'importations sont gérées : données supprimées à restaurer, données à initialiser sans mise à jour, mise à jour partielle de données, etc.
* Séparation claire des descripteurs des données et des données binaires associées
* 17 types de relation automatique sont possibles afin de générer des liaisons dynamiques lors de l’import des données
Données supportées :
* Web content : Folders, Journal Articles, Structures, Templates
* Documents and Media : Folders, Documents, Documents Types, Metadata sets
* Pages : Public & Private pages, Child pages, LayoutSet, Page templates
* Messages boards : Categories, Threads
* Categorization : Vocabularies, Categories, Child categories, Tags
* Sites : Unlimited sites and theirs childs (with Guest and Global), Site templates
* Administration : Users, Roles, User Groups, Organizations, Owners
* Portal : Unlimited instances, Portal preferences, Custom fields, Application display templates
DEVELOPER
Er trad een fout op tijdens de verwerking van de sjabloon.
The string doesn't match the expected date/time/date-time format. The string to parse was: "0". The expected format was: "yyyy-MM-dd'T'HH:mm:ss'Z'". The nested reason given follows: Unparseable date: "0" ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign parsedDate = createDate?datet... [in template "3192443#3192485#null" at line 52, column 9] ~ Reached through: #nested [in template "3192443#3192485#null" in macro "section" at line 204, column 17] ~ Reached through: @section title=languageUtil.get(local... [in template "3192443#3192485#null" at line 50, column 1] ----
1<#assign
2 channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${themeDisplay.getScopeGroupId()}'")
3
4 product = restClient.get(
5 "/headless-commerce-delivery-catalog/v1.0/channels/" + channel.items[0].id +
6 "/products/" + CPDefinition_cProductId.getData() +
7 "?accountId=-1&nestedFields=categories,productSpecifications,skus&skus.accountId=-1&skus.currencyCode=USD"
8 )
9
10 catalogName = product.catalogName!""
11 categories = product.categories![]
12 createDate = product.createDatea!0
13 productSpecifications = product.productSpecifications![]
14
15 liferayVersions = productSpecifications?filter(item -> stringUtil.equals(item.specificationKey, "liferay-version"))
16 platformOffering = categories?filter(item -> stringUtil.equals(item.vocabulary, "marketplace-liferay-platform-offering"))
17>
18
19<#assign publisherDetailsResponse = restClient.get("/c/publisherdetailses?filter=publisherName eq '${catalogName}'") />
20<#assign redirectPath="https://marketplace.liferay.com/e/publisher-details/29282497"/>
21
22<#if publisherDetailsResponse.items?has_content>
23 <#assign
24 publisherDetails = publisherDetailsResponse.items[0]
25 profileImageURL = publisherDetails.publisherProfileImage?replace("https://", "http://")
26 />
27</#if>
28
29<#assign
30 cpuValue = getSpecificationValue("cpu")
31 developerName = getSpecificationValue("developer-name", catalogName)
32 publisherURL = (getSpecificationValue("publisherwebsiteurl")?trim?replace(" ", ""))!""
33 ramValue = getSpecificationValue("ram")
34 supportEmail = getSpecificationValue("supportemailaddress")
35 supportPhone = getSpecificationValue("supportphone")
36 type = getSpecificationValue("type")?lower_case
37>
38<@section title = languageUtil.get(locale, "developer")>
39 <#if publisherDetails?has_content>
40 <a class="bg-neutral-8" href="${redirectPath}/${publisherDetails.id}">
41 ${developerName}
42 </a>
43 <#else>
44 <a class="bg-neutral-8" href="/?developer-name=${developerName}">
45 ${developerName}
46 </a>
47 </#if>
48</@section>
49
50<@section title=languageUtil.get(locale, "publisher-date", "Publisher Date")>
51 <#if createDate?has_content>
52 <#assign parsedDate = createDate?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")>
53 <p>${parsedDate?string("MMMM d, yyyy")}</p>
54 </#if>
55</@section>
56
57<@section title = languageUtil.get(locale, "deployment-method", "Deployment Method")>
58 <#list platformOffering as offering>
59 <p>${offering.name}</p>
60 </#list>
61</@section>
62
63<@section title = languageUtil.get(locale, "app-type", "App Type")>
64 <#if type == 'client-extension'> Client Extension </#if>
65 <#if type == 'cloud'> Cloud </#if>
66 <#if type == 'composite-app'> Composite App </#if>
67 <#if type == 'dxp'> DXP </#if>
68 <#if type == 'low-code-configuration'> Low Code Configuration </#if>
69</@section>
70
71<@section title = languageUtil.get(locale, "version")>
72 ${getSpecificationValue("latest-version", "1.0.0")}
73</@section>
74
75<#if liferayVersions?has_content>
76 <@section title = languageUtil.get(locale, "supported-versions", "Supported Versions")>
77 <#list liferayVersions as version>
78 ${version.value}<#if version?has_next>, </#if>
79 </#list>
80 </@section>
81</#if>
82
83<#if cpuValue?has_content>
84 <@section title = languageUtil.get(locale, "resource-requirements", "Resource Requirements")>
85 <p>
86 <#if cpuValue?has_content>
87 ${cpuValue}
88 <#assign cpuNumber = cpuValue?number?default(0) />
89 <#if cpuValue?eval gt 1>
90 CPUS
91 </#if>
92 <#if cpuValue?eval lt 2>
93 CPU
94 </#if>
95 </#if>, <#if ramValue?has_content>${ramValue} GB RAM</#if>
96 </p>
97 </@section>
98</#if>
99
100<@section title = languageUtil.get(locale, "standard-price", "Standard Price")>
101 <div>
102 <#assign purchasableSkus = [] />
103
104 <#list product.skus as sku>
105 <#if sku.purchasable?? && sku.purchasable>
106 <#assign purchasableSkus = purchasableSkus + [sku] />
107 </#if>
108 </#list>
109
110 <#assign standardSku = {} />
111
112 <#list purchasableSkus as sku>
113 <#assign matched = false />
114
115 <#list sku.skuOptions as opt>
116 <#if stringUtil.equals(opt.skuOptionValueKey, "standard")>
117 <#assign
118 matched = true
119 standardSku = sku
120 />
121
122 <#break>
123 </#if>
124 </#list>
125 <#if matched><#break></#if>
126 </#list>
127
128 <#if standardSku.price?? && standardSku.price.price?eval gt 0>
129 <div class="bg-neutral-8">${standardSku.price.priceFormatted!""}</div>
130 <#else>
131 ${languageUtil.get(locale, "free", "Free")}
132 </#if>
133 </div>
134</@section>
135
136<@section title = languageUtil.get(locale, "help-and-support", "Help and Support")>
137 <div class="d-flex flex-column mt-4">
138 <div class="d-flex">
139 <span class="help-and-support-link-icon">
140 <@clay["icon"] symbol="document" />
141 </span>
142
143 <a class="d-flex w-100 justify-content-between help-and-support-link" href="https://www.liferay.com/en/legal/marketplace-terms-of-service" target="_blank">
144 <span class="copy-text ml-1 help-and-support-link">
145 ${languageUtil.get(locale, "terms-and-conditions", "Terms & Conditions")}
146 </span>
147
148 <@clay["icon"]
149 className="help-and-support-link-arrow link-arrow ml-auto"
150 height="12"
151 symbol="angle-right"
152 />
153 </a>
154 </div>
155
156 <div class="d-flex">
157 <span class="help-and-support-link-icon">
158 <@clay["icon"] symbol="document" />
159 </span>
160
161 <a class="d-flex w-100 justify-content-between help-and-support-link" href="javascript:void(0)" onClick="openModal()">
162 <span class="copy-text ml-1 help-and-support-link">
163 ${languageUtil.get(locale, "publisher-contact-info", "Publisher Contact Info")}
164 </span>
165
166 <@clay["icon"]
167 className="help-and-support-link-arrow link-arrow ml-auto"
168 height="12"
169 symbol="angle-right"
170 />
171 </a>
172 </div>
173 </div>
174</@section>
175
176<@section
177 showLine = false
178 title = languageUtil.get(locale, "share-link")
179>
180 <a class="align-items-center copy-text d-flex font-weight-bold ml-1 text-decoration-none text-primary" href="#copy-share-link" onclick="copyToClipboard(Liferay.ThemeDisplay.getCanonicalURL())">
181 <span class="help-and-support-link-icon mr-1">
182 <@clay["icon"] symbol="link" />
183 </span>
184 Copy & Share
185 </a>
186</@section>
187
188<#function getSpecificationValue key default="">
189 <#local spec = productSpecifications?filter(productSpecification ->
190 stringUtil.equals(productSpecification.specificationKey, key)) />
191
192 <#return (spec?first.value)!default />
193</#function>
194
195<#macro section
196 title
197 showLine=true
198>
199 <p>
200 <strong>${title}</strong>
201 </p>
202
203 <div>
204 <#nested>
205 </div>
206
207 <#if showLine>
208 <hr />
209 </#if>
210</#macro>
211
212<script ${nonceAttribute}>
213 function modalBody() {
214 return `
215 <div class="align-items-center d-flex flex-row mb-3">
216 <span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;">
217 <#if profileImageURL?? && profileImageURL?length gt 0>
218 <img src="${profileImageURL}" alt="Publisher Image" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%;" />
219 <#else>
220 <@clay["icon"]
221 style="fill:#6B6C7E;"
222 symbol="picture"
223 />
224 </#if>
225 </span>
226
227 <div class="d-flex flex-column">
228 <h3 class="font-weight-bold mb-0">
229 ${catalogName}
230 </h3>
231 </div>
232 </div>
233
234 <#if publisherURL?has_content>
235 <div class="align-items-center d-flex flex-row mb-3">
236 <span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;">
237 <@clay["icon"]
238 style="fill:#6B6C7E;"
239 symbol="globe"
240 />
241 </span>
242
243 <div class="d-flex flex-column">
244 <span class="text-black-50">${languageUtil.get(locale, "publisher-website", "Publisher Website")}</span>
245
246 <a href="${publisherURL}" target="_blank" class="font-weight-bold">
247 ${publisherURL}
248 </a>
249 </div>
250 </div>
251 </#if>
252
253 <#if supportEmail?has_content>
254 <div class="align-items-center d-flex flex-row mb-3">
255 <span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;">
256 <@clay["icon"] style="fill:#6B6C7E;"symbol="envelope-closed" />
257 </span>
258
259 <div class="d-flex flex-column">
260 <span class="text-black-50">${languageUtil.get(locale, "support-email", "Support Email")}</span>
261
262 <a class="font-weight-bold" href="mailto:${supportEmail}" target="_blank">
263 ${supportEmail}
264 </a>
265 </div>
266 </div>
267 </#if>
268
269 <#if supportPhone?has_content>
270 <div class="d-flex flex-row align-items-center mb-3">
271 <span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;">
272 <@clay["icon"]
273 style="fill:#6B6C7E;"
274 symbol="phone"
275 />
276 </span>
277
278 <div class="d-flex flex-column">
279 <span class="text-black-50">${languageUtil.get(locale, "phone")}</span>
280
281 <a class="font-weight-bold" href="tel:${supportPhone}" target="_blank">
282 ${supportPhone}
283 </a>
284 </div>
285 </div>
286 </#if>
287 `;
288 }
289
290 function openModal() {
291 Liferay.Util.openModal({
292 bodyHTML: modalBody(),
293 center: true,
294 headerHTML: "<h2>Publisher Support Contact Info</h2>",
295 size: "md"
296 });
297 }
298</script>
299
300<script ${nonceAttribute}>
301 function copyToClipboard(text) {
302 if (navigator && navigator.clipboard && navigator.clipboard.writeText) {
303 navigator.clipboard.writeText(text);
304
305 Liferay.Util.openToast({ message: "Copied link to the clipboard" });
306 }
307 }
308</script>
309
310<style ${nonceAttribute}>
311 .copy-text {
312 color: #282934;
313 font-size: 16px;
314 }
315
316 .help-and-support-link {
317 color: inherit;
318 text-decoration: none;
319 }
320
321 .help-and-support-link-arrow {
322 fill: rgb(133, 140, 148);
323 }
324
325 .help-and-support-link:hover {
326 color: inherit;
327 text-decoration: none;
328 }
329
330 .help-and-support-link-icon {
331 color: rgb(133, 140, 148);
332 }
333
334 .help-and-support-svg mask,
335 .link-arrow mask {
336 mask-type: alpha;
337 }
338</style>
DEVELOPER
21-11-24 18:34
Published date
21-11-24 18:34
Published Date
21-11-24 18:34
SUPPORTED OFFERINGS
Liferay PaaS
Supported Versions
7.0
Resource Requirements
Edition
CE
PRICE
Paid
help & support
HTML Example
A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.