At ICBA Securities, we provide community bankers the tools to grow their investments.
ICBA Securities Corporation is a service of the ICBA Services Network®, a wholly owned subsidiary of ICBA.
ICBA Securities Corporation is a service of the ICBA Services Network®, a wholly owned subsidiary of ICBA.
ICBA Securities Corporation (ICBA Securities) a subsidiary of the ICBA (Independent Community Bankers of America) that was founded in 1989 following two years of intensive research by ICBA's Bank Services Committee.
As ICBA Securities is owned by the nation’s largest trade association for community banks, it has a commitment to return all of its profits to the industry, in the form of royalties, sponsorships, or dividends. Through 2021, it had reinvested over $49 million back into its supporting state/regional partners or into the ICBA. Six of the seven ICBA Securities board directors are leadership community bankers.
We are proud to be endorsed by over 30 community bank state associations.
ICBA Securities provides an education platform tailored to the needs of community banks and ICBA Securities representatives attend and speak at most state community banking conferences, conducting an average of 50 educational events per year.
ICBA Securities annually hosts the ICBA Bond Academy, which equips community bank portfolio managers with the skills to maintain a high performing institution, and the ICBA Balance Sheet Academy, which is an intermediate-level program for more experienced financial managers.
ICBA Securities also endorses and teaches at the Barret Graduate School of Banking in Memphis, Tenn. The President of ICBA Securities, Jim Reber, writes a monthly investment column for ICBA’s Independent Banker magazine.
If you would like to learn more about the organization, please contact ICBA Securities at 866-843-4222 or info@icbasecurities.com.
We are happy to provide you with a copy of our most recent audited financial statement. If you would like to learn more about the organization, please contact ICBA Securities at 866-843-4222 or info@icbasecurities.com.
The following has evaluated to null or missing:
==> productCategories.items [in template "49724393377863#35335#1064200" at line 37, column 26]
----
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: categories = productCategories.items [in template "49724393377863#35335#1064200" at line 37, column 13]
----
1<#assign
2 commerceContext = renderRequest.getAttribute("COMMERCE_CONTEXT")
3 account = commerceContext.getAccountEntry()
4 accountId = account.getAccountEntryId()
5 chanelId = commerceContext.getCommerceChannelId()
6/>
7
8<#assign
9 start = "", end = "", startDateStr = "", endDateStr = "", year = "", dateDisplay = "",
10 timeDisplay = "", locationDisplay = "", futureEvent = "", futureEventList = [], isWebinar = "false", isEvent = "false" ,type = ""
11/>
12
13<#if entries?has_content>
14 <div class="">
15 <div class="row align-items-start">
16 <#assign index = 0/>
17 <#list entries as curCPCatalogEntry>
18 <!-- Only display up to 4 entries -->
19 <#if index == 4 >
20 <#break>
21 </#if>
22 <#assign index++/>
23 <#assign
24 cpDefinitionId = curCPCatalogEntry.getCPDefinitionId()
25 productId = curCPCatalogEntry.getCProductId()
26 productName = curCPCatalogEntry.getName()
27 productShortDescription = curCPCatalogEntry.getShortDescription()
28 productDescription = curCPCatalogEntry.getDescription()
29 friendlyURL = cpContentHelper.getFriendlyURL(curCPCatalogEntry, themeDisplay)
30 productImages = cpContentHelper.getImages(cpDefinitionId, false, themeDisplay)
31 defaultImageURL = cpContentHelper.getDefaultImageFileURL(accountId, cpDefinitionId)
32 defaultImageFileVersion = cpContentHelper.getCPDefinitionImageFileVersion(cpDefinitionId, request)
33 productDetail = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}?accountId=${accountId}&nestedFields=categories,productSpecifications")
34 defaultImageURL = productDetail.urlImage?replace('https://localhost', '')
35 customFields = productDetail.customFields
36 productCategories = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}/categories?pageSize=40")
37 categories = productCategories.items
38 erc = productDetail.externalReferenceCode
39 infoObj = {}
40 deliverymethodArray = []
41 />
42
43 <!-- Process categories as per your logic -->
44 <#if categories?has_content>
45 <#list categories as category>
46 <#if category.vocabulary?replace(' ', '') == 'deliverymethod'>
47 <#assign deliverymethodArray += [{"id": category.id, "value": category.name}] />
48 <#else>
49 <#assign infoObj = infoObj + { (category.vocabulary?replace(' ', '')): {"id": category.id, "value": category.name} } />
50 </#if>
51 </#list>
52 <#assign infoObj = infoObj + {"deliverymethod": deliverymethodArray} />
53 </#if>
54
55 <!-- Add customFields to infoObj -->
56 <#list customFields as customField>
57 <#assign infoObj = infoObj + {(customField.name): customField.customValue.data} />
58 </#list>
59
60 <#-- Check Event Start Date -->
61 <#if infoObj["Event Start Date"]?has_content>
62 <#assign startRaw = infoObj["Event Start Date"] />
63 <#attempt>
64 <#assign start = startRaw?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'") />
65 <#assign startDateStr = start?string("MMM d") />
66 <#assign year = start?string("yyyy") />
67 <#assign today = .now />
68 <#assign todaylong = today?long />
69 <#assign startlong = start?long />
70 <#recover>
71 </#attempt>
72 </#if>
73 <#if infoObj["Event End Date"]?has_content>
74 <#assign end = infoObj["Event End Date"]?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'") />
75 <#assign endDateStr = end?string("MMM d") />
76 </#if>
77
78 <!-- Reset variables per item -->
79 <#assign isWebinar = "false" />
80 <#assign isEvent = "false" />
81 <#assign productTypeName = "" />
82 <#assign eventTypeName = "" />
83 <!-- Category Arrangement -->
84 <#if categories?has_content>
85 <#list categories as category>
86 <#if category.vocabulary == 'event type'>
87 <#assign eventTypeName = category.name />
88 </#if>
89 <#if category.vocabulary == 'product type'>
90 <#assign productTypeName = category.name />
91 <#if productTypeName == "Webinar">
92 <#assign isWebinar = "true" />
93 </#if>
94 <#if productTypeName == "Event">
95 <#assign isEvent = "true" />
96 </#if>
97 </#if>
98 </#list>
99 </#if>
100 <!-- Closed -->
101 <!-- Only display event, when its a webinar or event -->
102 <#assign languageValue = ""/>
103 <#if productTypeName?has_content && (isWebinar == "true" || isEvent == "true")>
104 <#if isWebinar == "true">
105 <#assign type = "product-name-webinar"/>
106 <#else>
107 <#assign type = "product-name-event"/>
108 </#if>
109
110 <#assign productTypeImageDefault = languageUtil.get(locale, type)/>
111 <div class="col-12">
112 <div class="card white-bg-card is-horizontal-on-desktop is-horizontal-on-mobile cta-position-right-bottom mb-4">
113 <div class="card-img">
114 <#if productTypeImageDefault?has_content && productTypeImageDefault != type >
115 <img src="${productTypeImageDefault}" data-fileentryid="" width="271" height="192" alt="" class="product-image-img" />
116 <#else>
117 <#if productImages?has_content>
118 <#list productImages as currentImage>
119 <#if currentImage?has_content>
120 <img src="${currentImage.getURL()}" data-fileentryid="" width="271" height="192" alt="" class="product-image-img" />
121 <#else>
122 <img src="${productTypeImageDefault}" data-fileentryid="" width="271" height="192" alt="" class="product-image-img" />
123 </#if>
124 </#list>
125 </#if>
126 </#if>
127 <!-- <img src="/documents/35333/0/624ac740b5293af398505d5cefabed561be471a1.webp/04f9e012-4be2-bee7-76bd-552fd85e399b?version=1.0&t=1746205445161" alt=""> -->
128 </div>
129 <div class="card-body">
130 <h3 class="card-title header-s" data-truncate="2"><a href="${friendlyURL}">${productName}</a></h3>
131 <div data-truncate="3">${productDescription}</div>
132 <div class="card-meta">
133 <#if startDateStr?has_content && endDateStr?has_content>
134 <#if startDateStr == endDateStr>
135 <#assign dateDisplay = startDateStr + ", " + year />
136 <#else>
137 <#assign dateDisplay = startDateStr + "–" + endDateStr + ", " + year />
138 </#if>
139 </#if>
140 ${dateDisplay}
141 <#if productTypeName?has_content && isWebinar == "true">
142 | <li class="label">Webinar</li>
143 </#if>
144 <#if eventTypeName?has_content && isEvent == "true">
145 | <li class="label">${eventTypeName}</li>
146 </#if>
147 </div>
148
149 <#if categories?has_content>
150 <div class="card-categories">
151 <#assign topicCount = 0 />
152 <#list categories as topicCat>
153 <#if topicCat.vocabulary == "topic" && topicCount < 2>
154 <span class="tag-pill body-13">${topicCat.name}</span>
155 <#assign topicCount = topicCount + 1 />
156 </#if>
157 </#list>
158 </div>
159 </#if>
160 <div class="btns-wrapper">
161 <a href="${friendlyURL}" class="btn btn-link btn-arrow-right"><span class="visually-hidden">View details</span></a>
162 </div>
163 </div>
164 </div>
165 </div>
166 </#if>
167 <!-- Closed -->
168 </#list>
169 </div>
170 </div>
171</#if>
ICBA Securities is pleased to have earned the endorsement of the community bank state associations below. We participate in their educational agendas and support their advocacy efforts. We also help support their operations financially in the form of royalties and sponsorships. Click on a logo to visit an association’s website.
If you would like to learn more about the organization, please contact ICBA Securities at 866-843-4222 or info@icbasecurities.com.
Community Bankers Association of Ohio
Columbus
Ohio
President & CEO
Legends Bank of Clarksville
TN
Chairman
President and CEO