Asset Publisher

An error occurred while processing the template.
The following has evaluated to null or missing:
==> data.meta [in template "252001#252047#252845" at line 459, column 10]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if data.meta.laufendenummer?has_cont... [in template "252001#252047#252845" at line 459, column 5]
----
1<#-- used @ Veranstaltung-Detailseite Intro 
2 used @ Publikation-Detailseite Intro 
3--> 
4 
5<#-- 
6Web content templates to display teaser on thema detail page 
7 
8Generic template for detail pages Intro / Teaser element 
9--> 
10<#-- 
11Display the current page title 
12--> 
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" /> 
14<#include "${fullTemplatesPath}/macros/debugging.ftl" /> 
15 
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" /> 
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" /> 
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" /> 
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" /> 
20 
21 
22<#-- 
23 renders the Intro for nearly all Pages 
24 TODO: remove Share? (was in the designs, but not anymore?) 
25 TODO: check if languageSelect/filter are working (js) 
26 
27 - portletId 
28 - data = { 
29 "media": string (src from image), 
30 "category": string, 
31 "title": string, 
32 "author": string, 
33 "subheadline": string, 
34 "copy": string, 
35 "filter": { 
36 "id": string, 
37 "name": string, 
38 "entries": Array<Object> ({key:value}), 
39 }, 
40 "languageSelect": { 
41 "id": string, 
42 "name": string, 
43 "entries": Array<Object> ({key:value}), 
44 }, 
45 "meta": { 
46 "pos"; string (top/bottom) 
47 "date": string, 
48 "hash": string, 
49 "info": string, (url) 
50 }, 
51 "share" : { 
52 "login": string, 
53 "print": string, 
54 "mail": string, 
55 "multishare": string?? (tbd) 
56
57 - AMMetadata: macro 
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content 
59
60--> 
61 
62<#assign 
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
64 
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") 
67 
68 themeDisplay = ServiceContext.getThemeDisplay() 
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay) 
70 
71 languageId = themeDisplay.getLocale() 
72 groupId = themeDisplay.getScopeGroupId() 
73 currentUrl = themeDisplay.getURLCurrent() 
74 
75 layout = themeDisplay.getLayout() 
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id") 
77/> 
78 
79<#setting locale="${languageId}"> 
80 
81<#-- get article from url --> 
82 
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! > 
84 
85 
86<#if entry?has_content> 
87 
88 <#if entry.resourcePrimKey??> 
89 <#assign primaryKey = entry.resourcePrimKey?number > 
90 <#elseif entry.classPK??> 
91 <#assign primaryKey = entry.classPK?number > 
92 </#if> 
93 
94 <#assign 
95 jsonString = FrontendService.article.getWebcontent(primaryKey) 
96 json = FrontendService.json.parseAsJson(jsonString) 
97 
98 title = entry.getTitle(languageId) 
99 data = { 
100 "title": title 
101
102 /> 
103 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" /> 
104 
105 <#if hasContent('untertitel', languageId, json)> 
106 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } > 
107 </#if> 
108 
109 <#if hasContent('beschreibung', languageId, json)> 
110 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } > 
111 </#if> 
112 
113 <#-- fill meta data --> 
114 <#assign meta = {} /> 
115 
116 <#-- PUBLIKATIONEN DETAIL --> 
117 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
118 
119 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)> 
120 <#assign 
121 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first") 
122 /> 
123 
124 <#if coverBildString?has_content> 
125 <#assign 
126 coverBild = FrontendService.json.parseAsJson(coverBildString) 
127 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) 
128 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid ) 
129 data = data + { "media": linkToDMT, "meta" : dMTJsonObject } 
130 /> 
131 <#if dMTJsonObject.altText?? > 
132 <#assign data = data + {"alt" : dMTJsonObject.altText} /> 
133 </#if> 
134 <#if dMTJsonObject.quelle??> 
135 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } /> 
136 </#if> 
137 </#if> 
138 <#-- uncomment to display pdf cover as Intro Image 
139 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)> 
140 <#assign 
141 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first") 
142 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/> 
143 <#if fileEntry?has_content> 
144 <#assign 
145 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
146 data = data + { "media": linkToThumbnail } 
147 /> 
148 </#if> 
149 --> 
150 </#if> 
151 
152 <#assign 
153 meta = meta + { "orderInfo": "true" } 
154 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!"" 
155 /> 
156 
157 
158 
159 <#if hasContent('erscheinungsdatum', languageId, json)> 
160 <#assign 
161 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
162 /> 
163 <#if erscheinungsdatum?has_content > 
164 <#assign 
165 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId ) 
166 meta = meta + { "date": erscheinungsdatumFormatted } 
167 /> 
168 </#if> 
169 </#if> 
170 
171 <#if verbundJournalArticle?has_content> 
172 <#assign 
173 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey) 
174 verbundJson = FrontendService.json.parseAsJson(verbundJsonString) 
175 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first") 
176 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first") 
177 /> 
178 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" /> 
179 <#assign meta = meta + { "laufendenummer": laufendenummer } > 
180 
181 <#if coverImg?has_content && coverImg.url?has_content > 
182 <#assign meta = meta + { "coverImg": coverImg.url } > 
183 </#if> 
184 </#if> 
185 
186 
187 <#if meta?has_content> 
188 <#assign data = data + {"meta": meta } > 
189 </#if> 
190 
191 </#if> 
192 <#-- PUBLIKATIONEN DETAIL END --> 
193 
194 
195 <#-- VERANSTALTUNGEN DETAIL --> 
196 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
197 <#assign 
198 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!"" 
199 languages = entry.getAvailableLanguageIds() 
200 links = [] 
201 /> 
202 <#if languages?has_content && friendlyUrl?has_content> 
203 <#if (languages?size > 1) > 
204 <#list languages as language> 
205 <#assign 
206 defaultLanguage = "de_DE" 
207 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage) 
208 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale 
209 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId) 
210 
211 link = { 
212 "key": language!defaultLanguage, 
213 "value": linkLocale.getDisplayLanguage(languageId), 
214 "url": "/c/portal/update_language?p_l_id=" + 
215 layout.plid + "&redirect=" + langFriendlyUrl + 
216 "&languageId=" + language 
217
218 /> 
219 <#if language == languageId> 
220 <#assign link = link + { "selected": "true" } > 
221 </#if> 
222 <#assign links = links + [link]> 
223 </#list> 
224 <#assign 
225 data = data + { 
226 "languageSelect": { 
227 "id": "languageSelectRedirect", 
228 "name": "languageselectRedirect", 
229 "entries": links, 
230 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar") 
231
232
233 /> 
234 </#if> 
235 </#if> 
236 </#if> 
237 
238 <#if hasContent('erscheinungsdatum', languageId, json)> 
239 <#assign 
240 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
241 meta = meta + { "start": startdate?date.iso, "end": "" } 
242 /> 
243 </#if> 
244 
245 <#if hasContent('startdatum', languageId, json)> 
246 <#assign 
247 startdate = getValueForLanguage('startdatum', languageId, json, "first") 
248 meta = meta + { "start": startdate?date.iso, "end": "" } 
249 /> 
250 </#if> 
251 
252 <#if hasValue('einfuehrungText', locale, json)> 
253 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } > 
254 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")> 
255 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } > 
256 </#if> 
257 
258 <#if hasContent('endedatum', languageId, json)> 
259 <#assign 
260 enddate = getValueForLanguage('endedatum', languageId, json, "first") 
261 meta = meta + { "end": enddate?date.iso } 
262 /> 
263 </#if> 
264 
265 <#if hasContent('startzeit', languageId, json)> 
266 <#assign 
267 startzeit = getValueForLanguage('startzeit', languageId, json, "first") 
268 /> 
269 <#if startzeit?has_content > 
270 <#assign meta = meta + { "startzeit": startzeit } /> 
271 </#if> 
272 </#if> 
273 
274 <#if hasContent('endezeit', languageId, json)> 
275 <#assign 
276 endezeit = getValueForLanguage('endezeit', languageId, json, "first") 
277 meta = meta + { "endezeit": endezeit } 
278 /> 
279 </#if> 
280 
281 <#if hasContent('ortWCSKASDEORT', languageId, json)> 
282 <#assign 
283 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first")) 
284 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number 
285 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!"" 
286 /> 
287 <#if ortWCSKASDEORTWebContent?has_content > 
288 <#assign 
289 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!"" 
290 /> 
291 <#if ortWCSKASDEORTTitle?has_content > 
292 <#assign 
293 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle } 
294 /> 
295 </#if> 
296 </#if> 
297 </#if> 
298 
299 
300 <#if hasContent('veranstaltungsnummer', languageId, json)> 
301 <#assign 
302 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first") 
303 meta = meta + { "verauuid": verauuid } 
304 /> 
305 </#if> 
306 
307 
308 <#if (data.meta)?has_content > 
309 <#assign meta = data.meta /> 
310 </#if> 
311 
312 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)> 
313 <#assign 
314 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first") 
315 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution") 
316 /> 
317 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} > 
318 
319 
320 <#if mediaData.meta?? && mediaData.meta.quelle??> 
321 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } /> 
322 </#if> 
323 </#if> 
324 
325 
326 <#if meta?has_content> 
327 <#assign data = data + {"meta": meta } > 
328 </#if> 
329 
330 <#-- END fill meta data --> 
331 
332 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)> 
333 <#assign 
334 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json) 
335 authors = [] 
336 /> 
337 <#list journalArticles as articleString> 
338 <#assign article = FrontendService.json.parseAsJson(articleString) /> 
339 <#if article?has_content && article?is_hash && article.classPK??> 
340 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" /> 
341 <#if articleDereferenced?has_content > 
342 <#assign 
343 author = "" 
344 articlePrimaryKey = articleDereferenced.classPK?number 
345 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey) 
346 articleJson = FrontendService.json.parseAsJson(articleJsonString) 
347 /> 
348 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" /> 
349 <#if hasValue('anredetitel', languageId, articleJson)> 
350 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " "> 
351 </#if> 
352 <#if hasValue('vorname', languageId, articleJson)> 
353 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " "> 
354 </#if> 
355 <#if hasValue('nachname', languageId, articleJson)> 
356 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " "> 
357 </#if> 
358 
359 <#attempt> 
360 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" > 
361 <#recover> 
362 <#assign href = "#" > 
363 </#attempt> 
364 <#if href?has_content && href != "#" && href != "/_404"> 
365 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'> 
366 </#if> 
367 
368 <#assign authors = authors + [author?trim]> 
369 </#if> 
370 </#if> 
371 </#list> 
372 <#if authors?has_content> 
373 <#assign data = data + { "author": authors?join(", ") } > 
374 </#if> 
375 </#if> 
376 
377 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") > 
378 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! > 
379 <#if categories?has_content && categories[0]?has_content > 
380 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
381 </#if> 
382 
383 <#if hasContent('ausgebucht', languageId, json)> 
384 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }> 
385 </#if> 
386 
387 <#if hasContent('storniert', languageId, json)> 
388 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }> 
389 </#if> 
390 
391 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") > 
392 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! > 
393 <#if categories?has_content && categories[0]?has_content > 
394 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
395 </#if> 
396 <#else> 
397 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! > 
398 <#if categories?has_content && categories[0]?has_content > 
399 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
400 </#if> 
401 </#if> 
402 
403 
404 <#assign 
405 languages = [] 
406 /> 
407 
408 <#attempt> 
409 <#if json["document_pdfDMTBASICDOCUMENT"]?? > 
410 <#list json["document_pdfDMTBASICDOCUMENT"]?keys as pdf_language> 
411 <#if pdf_language?has_content > 
412 <#assign 
413 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first") 
414 docRef = FrontendService.json.parseAsJson(docRefJson) 
415 /> 
416 <#if docRef?is_hash && pdf_language != languageId > 
417 <#assign 
418 lang = FrontendService.language.getLocaleByKey(pdf_language)!"" 
419 docGroupId = docRef["groupId"]?number 
420 docUuid = docRef["uuid"] 
421 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale ) 
422 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject ) 
423 /> 
424 <#if lang?has_content> 
425 <#assign 
426 languages = languages + [ 
427
428 "key": pdf_language, 
429 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(), 
430 "url": dMTLink 
431 }] 
432 /> 
433 </#if> 
434 </#if> 
435 </#if> 
436 </#list> 
437 </#if> 
438 <#recover> 
439 </#attempt> 
440 
441 <#if (languages?size > 0)> 
442 <#attempt> 
443 <#assign 
444 data = data + { "languageSelect": { 
445 "id": "languageSelect", 
446 "name": "languageselect", 
447 "entries": languages, 
448 "documents": "", 
449 "button": "true" 
450 }} 
451 /> 
452 <#recover> 
453 </#attempt> 
454 </#if> 
455 
456 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" /> 
457 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)} 
458 
459 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()> 
460 <div>  
461 <div id="publicationVerbundPagination"> 
462 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg /> 
463 </div> 
464 </div> 
465 </#if> 
466 
467<#elseif (editmode?? && editmode)> 
468 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl /> 
469</#if> 

Asset Publisher

If you missed the panel discussion, you can watch it on our YouTube Channel.

 

Report: The African Continental Free Trade Area (AfCFTA) came into force on May 30, 2019. On January 1, 2021, trading began. By today, 43 out of 55 AU Member States ratified the agreement. For detailed information on the status of the AfCFTA, please read our Policy Brief.

On June 16, 2022, the KAS Office Ethiopia/AU and the United Nations Economic Commission for Africa (UNECA) jointly organized a high-level panel discussion in Addis Ababa to discuss on “The AfCFTA and the Private Sector. Realizing Africa’s Full Potential”. The event brought together key stakeholders of the AU Commission, the Regional Economic Communities, the AU member states, entrepreneurs, and businesses associations. About 100 guests attended the event in Addis Ababa and more than 100 followed online via live stream.

 

In his opening remarks, UNECA Deputy Executive Secretary Antonio Pedro welcomed the participants. Mr. Pedro said the panel will help evaluate the progress of the AfCFTA and the inclusion of the private sector: “The national AfCFTA implementation strategies being developed by several countries with the support of ECA, highlight the importance of inclusive implementation of the AfCFTA through improved private sector engagement, including Small and Medium Enterprises (SMEs) as well as women and youth.” Mr. Pedro also spoke about the AfCFTA Country Business Index (ACBI), which is the primary and innovative tool to capture private sector opinion on the implementation of the Agreement and provides useful information on trade challenges faced by women traders and small businesses.

In his opening remarks, the KAS Country Representative Benno Müchler said that the AfCFTA potentially holds the biggest promise for the citizens of the African continent and its coming generations. There remain many challenges, said Mr. Müchler: "From my observation, I think at the basis of many of them lies the question of 'trust' between AU member states. If we think, for example, of the protocol for the free movement of people in Africa which has been ratified by only four member states so far." Bringing the private sector on board will be crucial for the success of the AfCFTA. He said, the German Government had done a lot in recent years to promote trade and economic growth in Africa. He went on to say, as a German political foundation with more than 20 offices in Africa, KAS understands very well the importance of foreign direct investment, Africa’s economic potential and the many opportunities it has to offer. He shared the hope that growing trade between Africa and the world under the AfCFTA will lead to more value addition and job creation on the continent.

In his keynote speech, Endalew Mekonnen, State Minister in the FDRE Ministry of Trade and Regional Integration (MoTRI), thanked KAS and the UNECA for organizing the event. He pointed out that Ethiopia is the second largest country in Africa in terms of population size, with 60 percent younger than 25 years. By this, Ethiopia has a great potential for trade and investment. The Government of Ethiopia has made critical reforms to enhance the private sector. He underlined the Ethiopian Government’s Homegrown Economic Reform Agenda that aims to unlock the country’s economic potential by creating more jobs, inclusive growth, poverty reduction, innovation, and industrialization. As the State Minister put it, Ethiopia has the ambition to become not less than the "beacon of prosperity" of Africa by 2030. The State Minister noted Ethiopia’s "unwavering commitment" to the AfCFTA and the paramount importance of the free trade area for Africa as a whole: “We firmly believe that strengthening our trade relations within Africa through AfCFTA is very critical, not only because of the volume of trade but also in achieving the objective of Pan-African movement in the framework of creating a strong and united Africa.” The top seven export destinations of Ethiopia in 2021 were Somalia, the Netherlands, the United States, Saudi Arabia, the UAE,  Germany, and Djibouti.

 

The first panel took place under the theme “Potential for More Private Sector Engagement” and brought together: Chiza Charles Chiumya, Acting Director for Industry, Mining and Entrepreneurship at the AU Commission; Dr. Osman Babikir, Acting Director for Economic Cooperation at IGAD who participated virtually from Kenya; Christoph Kannengießer, CEO of the German-African Business Association (Afrika-Verein); and Kebour Ghenna, Executive Director of the Pan African Chamber of Commerce and Industry (PACCI). The panel was moderated by Prof. Melaku Desta, Coordinator of the African Trade Policy Center (ATPC) UNECA.

 

Charles Chiumya, Acting Director for Industry, Mining and Entrepreneurship at the AU Commission Department for Economic Development, Trade, Industry, Mining (ETIM), said that the AfCFTA is first of all just a document. “We need to give life to that document." He indicated that there are two major challenges that hinder doing business in Africa: the size of the market and the multiple rules practiced to govern trade in the continent. In order to better integrate the private sector, governments of AU member states should consider working on raising awareness of the opportunities and make sure that policies and negotiations are fully implemented for the private sector because the sector is the ultimate user of these policies. For the private sector, Mr. Chiumya said, much more trade information needs to be provided. In general, he said, the private sector also needs to be better organized.

Dr. Osman Babikir, Director of the Economic Cooperation and Regional Integration Division at IGAD, underlined the initiatives his organization had undertaken to contribute to the successful implementation of the AfCFTA and support the private sector. To improve regional integration, IGAD focuses on eight pillars: the institutional dimension; the political dimension; infrastructure; society; trade; the environment; and youth. He highlighted that improving Africa’s infrastructure will be crucial for the success of the AfCFTA. Here, he said, IGAD has developed a strategy that focuses on the energy, transport, water and ICT sectors.

Christoph Kannengießer, CEO of the German-African Business Association (Afrika-Verein) began by saying that he would like to encourage AU member states to go on the path of free trade and market integration. "I think this is a very important and good signal in these times," said Mr. Kannengießer. "Deglobalization, protectionism is not the right answer to the challenges of the 21st century." He hoped for more trade between Africa and Europe. "Africa has everything what we don't have. And Europe has a lot of what Africa needs," said Mr. Kannengießer. He stated that Africa has a young and growing population, renewable energy. Europe needs energy. It has an aging and shrinking population, but it has technology and capital. Bringing these assets together makes a lot of sense, said Mr. Kannengießer. Therefore, besides grower inner-African trade, the AfCFTA is a big promise for more trade between Africa and Europe. Germany has had a consistent investment in Africa, investing approximately 12 billion euros in the continent at the moment, but this is less than Germany could do. Different from other countries, German investment focuses on industrial projects, local content, and industrial production, which are more capital-intensive. Giving the example of the automotive industry, those investments need big, integrated markets, which is why the AfCFTA is important for any similar large industry. Talking about the integration of the private sector, Mr. Kannengießer said there is a strong dialogue between the government and business associations in Germany which helps to improve the overall economy.

Kebour Ghenna, Executive Director of the Pan African Chamber of Commerce and Industry (PACCI), mentioned that AfCFTA is an agreement that makes business simpler than before. However, there remain many challenges before its implementation. "If we go around and ask the private sector what is the 'AfCFTA', I think we will find various funny responses. Some will say, it's a country. Some will say, it's a piece of equipment. So, we are really far from bringing the business community to understand actually what is the AfCFTA and as an agreement what its impact will be on business." For him, the achievement of the AfCFTA was more a journey than a destination. Negotiations were still ongoing, for many of the business community not fast enough. Compared to Germany, the dialogue between the private sector and the governments in Africa was not good enough and needs to be developed. "The discussion truely has to be conducted by the governments, there is no question about it. But somehoew the briefing, the debriefing and also the comments of the private sector in many places have been lacking," said Mr. Kebour. The major challenges for the private sector in Africa include customs, logistics, infrastructure, productive capacity - and lastly, solidarity between AU member states. The 54 countries that signed the agreement had different stages of development. Mr. Kebour said: "There will obviously be some winners and some losers. And so will the continent be able to maintain that integration into the future? And this is where we as citizens of Africa have really to start thinking about what kind of Africa we want to have. Without really helping each other, this AfCFTA will not be easy to implement." 

 

The second panel under the theme “Comparative Advantages and Views from the Private Sector” brought together H.E. Ewumbue-Monono Churchill, the Cameroonian Ambassador to Ethiopia, the AU and UNECA; Eng. Melaku Ezezew, President of the Ethiopian Chamber of Commerce and Sectoral Associations (ECCSA); Chiara-Felicitas Otto, Managing Director of exficon Gmbh and Eight innovations GmbH who participated virtually from Germany;  and Precious Di Phiri, Founder of Awawo Eco Malawi.

 

Amb. Churchill highlighted that Cameroon was one of the first countries to sign the AfCFTA. Regarding the AfCFTA processes, Cameroon had been working on two main issues: awareness creation and institutionalization of the AfCFTA. For the integration of the private sector, two chambers and also the the diaspora had been involved by the Government. Amb. Churchill said that the private sector is the major engine of the economy in Cameroon, so this sector will benefit from the implementation of AfCFTA and provide a great benefit to the country by opening the business door for youth and women.

Eng. Melaku Ezezew, President of the Ethiopian Chamber of Commerce and Sectoral Associations (ECCSA), underlined the importance of the private sector as the backbone of Ethiopia’s economy. The Chamber of Commerce has strong links with the private sector. However, Ethiopia’s private sector had received limited information about the AfCFTA and its advantages so far. Therefore, after conducting a study and exchanging with the government, the Chamber trained experts to provide information about the AfCFTA across sectors in the country. The goal is that Ethiopia's private sectors can make full use of the AfCFTA and becomes internationally competetive. "As we Ethiopia are a land-locked country, what will be our opportunities in utilizing this AfCFTA. (...) In order to be competetive in the world market, what is needed: quality, price, mass production, and so on. (...) The business community should know and make themselves to the international standards to be competent in the AfCFTA market." 

Chiara-Felicitas Otto, Managing Director of exficon GmbH, said the company works in 25 African countries. Talking about the challenging of working in Africa, Ms Otto said: "I think there are many dimensions that you have to think about. Working in Africa, working with Africans has a lot of personal, intercultural dimensions. (...) You have to be present on the market. There is a very different code of how business is being done. And there is a language aspect." This is something German and European clients have to adjust to. On the business side, there were many administrative hurdles, but she said, that was not much different from doing business somewhere else. On the financial side, challenges would depend on the country. A non-tarrif barrier, she would often come across is a demand of a high quota of local content that many countries demand. This would be very understandable, but in some countries it was not possible to meet due to lack of availability on the local market.

Precious Di Phiri, Founder of Awawo Eco Malawi, identified several major challenges faced by young African entrepreneurs in export markets. These include lack of access to finance, information, mentorship, exchange programs, and inclusion of young people in policy processes and the long processes of certification. This created frustration among the young generation. "Young people give up on these ideas," Mr. Di Phri said. The AfCFTA implementation will benefit young entrepreneurs in numerous ways, as for instance better information about value addition, training, mentorship, and the engagement of youth. 

 

---

 

Overview of Speakers and Panelists

 

Opening Remarks:

Antonio PEDRO, Deputy Executive Secretary of the Economic Commission for Africa (ECA)

Benno MÜCHLER, KAS Country Representative Ethiopia/AU


Keynote Speech:

Endalew MEKONNEN, State Minister, Ministry of Trade and Regional Integration of the Federal Democratic Republic of Ethiopia 


Panel 1: Potential for More Private Sector Engagement

Chiza Charles CHIUMYA, Acting Director – Industry, Mining and Entrepreneurship Department of Economic Development, Trade Industry and Mining – AUC (tbc)
 
Dr. Osman BABIKIR, Acting Director for Economic Cooperation, IGAD
 
Christoph KANNENGIESSER, German-African Business Association (Afrika-Verein)
 
Kebour GHENNA, Executive Director of the Pan African Chamber of Commerce and Industry
 
Host: Melaku DESTA, Coordinator of the African Trade Policy Center (ATPC) UNECA


Panel 2: Comparative Advantages and Views from the Private Sector
 
H.E. Ewumbue-Monono CHURCHILL, Ambassador of the Republic of Cameroon to Ethiopia, the AU und UNECA
 
Eng. Melaku EZEZEW, President of the Ethiopian Chamber of Commerce & Sectoral Association
 
Precious DI PHIRI, Founder of Awawo Eco Malawi
 
Chiara-Felicitas OTTO, Managing Director of exficon GmbH und Eight Innovations GmbH (virtual)
 
Host: Benno MÜCHLER, KAS Country Representative Ethiopia/AU