98 Products Available
The following has evaluated to null or missing:
==> productDetail.urlImage [in template "37794063322763#20119#53162" at line 38, column 51]
----
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: defaultImageURL = productDetail.urlIm... [in template "37794063322763#20119#53162" at line 38, column 33]
----
1<#assign
2 defaultImgMap = {
3 "220": "/documents/d/guest/220-coming-soon",
4 "220EV": "/documents/d/guest/220ev-coming-soon",
5 "520": "/documents/d/guest/520-coming-soon",
6 "389": "/documents/d/guest/389-coming-soon",
7 "520EV": "/documents/d/guest/520ev-coming-soon",
8 "535": "/documents/d/guest/535-coming-soon",
9 "536": "/documents/d/guest/536-coming-soon",
10 "537": "/documents/d/guest/537-coming-soon",
11 "548": "/documents/d/guest/548-coming-soon",
12 "567": "/documents/d/guest/567-coming-soon",
13 "579": "/documents/d/guest/579-coming-soon",
14 "579EV": "/documents/d/guest/579ev-coming-soon",
15 "589": "/documents/d/guest/589-coming-soon"
16 }
17 />
18<#assign
19 commerceContext = renderRequest.getAttribute("COMMERCE_CONTEXT")
20 account = commerceContext.getAccountEntry()
21 accountId = account.getAccountEntryId()
22 chanelId = commerceContext.getCommerceChannelId()
23 />
24<div class="product-card-tiles">
25 <#if entries?has_content>
26 <#list entries as curCPCatalogEntry>
27
28 <#assign
29 cpDefinitionId = curCPCatalogEntry.getCPDefinitionId()
30 productId = curCPCatalogEntry.getCProductId()
31 productName = curCPCatalogEntry.getName()
32 productShortDescription = curCPCatalogEntry.getShortDescription()
33 productDescription = curCPCatalogEntry.getDescription()
34 friendlyURL = cpContentHelper.getFriendlyURL(curCPCatalogEntry, themeDisplay)
35 defaultImageURL = cpContentHelper.getDefaultImageFileURL(accountId, cpDefinitionId)
36 defaultImageFileVersion = cpContentHelper.getCPDefinitionImageFileVersion(cpDefinitionId, request)
37 productDetail = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}?accountId=${accountId}&nestedFields=categories,productSpecifications")
38 defaultImageURL = productDetail.urlImage?replace('https://localhost', '')
39 fileEntryIdAttr = 'data-fileentryid="' + defaultImageFileVersion.fileEntryId + '"'
40 specifications = productDetail.productSpecifications
41 customFields = productDetail.customFields
42
43 productCategories = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}/categories?pageSize=40")
44 categories = productCategories.items
45
46 erc = productDetail.externalReferenceCode
47 infoObj = {}
48 tags = productDetail.tags
49 featuredSpecificationKeys = ["fit", "weight", "material"]
50 isSuggested = false
51 suggestedClass = ""
52
53 visiblePrice = ""
54 miles = ""
55 neworUsed = ""
56 locationName = ""
57 locationId = ""
58 displayPrice = false
59
60 truckBadgesArray = [{"id": "", "value": ""}]
61
62
63 />
64 <#if categories?has_content>
65 <#list categories as category>
66 <#if category.vocabulary?replace(' ', '') = 'truckbadges'>
67 <#assign truckBadgesArray += [{"id": category.id, "value": category.name}] />
68 <#else>
69 <#assign infoObj = infoObj + {category.vocabulary?replace(' ', ''): {"id": category.id, "value": category.name}} />
70 </#if>
71 </#list>
72 <#assign infoObj = infoObj + {"truckbadges": truckBadgesArray} />
73 </#if>
74
75 <div class="d-none">
76 <#list customFields as customField>
77 <#if customField.name = 'Visible Price'>
78 <#assign visiblePrice = customField.customValue.data />
79 </#if>
80
81 <#if customField.name = 'Display Price'>
82 <#assign displayPrice = customField.customValue.data />
83 </#if>
84
85 <#if customField.name = 'Miles'>
86 <#assign miles = customField.customValue.data />
87 </#if>
88 </#list>
89
90 <#if infoObj.year?has_content>
91 <#assign productName = infoObj.year.value />
92 </#if>
93 <#if infoObj.make?has_content>
94 <#assign productName = productName + " " + infoObj.make.value />
95 </#if>
96 <#if infoObj.model?has_content>
97 <#assign productName = productName + " " + infoObj.model.value />
98
99 <#if defaultImageURL?trim?contains('/o/commerce-media/default/?groupId=') || defaultImageURL?trim?contains('commercial-truck-coming-soon')>
100 <#if defaultImgMap[infoObj.model.value?lower_case]?? >
101 <#assign fileEntryIdAttr = '' />
102 <#assign defaultImageURL = defaultImgMap[infoObj.model.value?lower_case] />
103 </#if>
104 </#if>
105
106 </#if>
107
108 <#if categories?has_content>
109 <#list categories as category>
110 <#if category.vocabulary = 'conditions'>
111 <#assign newOrUsed = category.name />
112 <#if category.name = 'Used'>
113 <#assign newOrUsed = 'Pre-Owned'/>
114 </#if>
115 </#if>
116
117 <#if category.vocabulary = 'location'>
118 <#assign locationName = category.name />
119 <#assign locationId = category.id />
120 </#if>
121
122 <!--<span class="btn btn-outline-primary product-category">${category.vocabulary}: ${category.name}</span> -->
123 </#list>
124 </#if>
125
126 <#if specifications?has_content>
127 <#list specifications as specification>
128 <#if featuredSpecificationKeys?seq_contains(specification.specificationKey) >
129 <span class="badge badge-secondary">${specification.value}"</span>
130 </#if>
131 </#list>
132 </#if>
133 </div>
134
135 <#if tags?seq_contains("suggested")>
136 <#assign isSuggested = true />
137 <#assign suggestedClass = "suggested" />
138 </#if>
139 <div class="product-listing-card">
140 <div class="product-card-top click-here-box">
141 <img src="${defaultImageURL}" ${fileEntryIdAttr} class="img-fluid" alt="${productName}" />
142
143 <#if infoObj.truckbadges??>
144 <#list infoObj.truckbadges as truckBadge>
145 <#if truckBadge.value = "Red Oval">
146 <div class="overlay-badge top-right">
147 <img src="/documents/d/guest/red-oval" class="overlay-badge-img red-oval-badge" alt="Red Oval" />
148 </div>
149 </#if>
150
151 <#if truckBadge.value = "Work Ready">
152 <div class="overlay-badge top-left">
153 <img src="/documents/d/guest/work-ready" class="overlay-badge-img work-ready-badge" alt="Work Ready" />
154 </div>
155 </#if>
156 </#list>
157 </#if>
158
159 <#if isSuggested>
160 <div class="aspect-ratio-item-bottom-right">
161 <span class="label label-inverse-primary ${suggestedClass}" >
162 <span class="label-item label-item-expand">
163 Suggested
164 </span>
165 </span>
166 </div>
167 </#if>
168
169 <a href="${friendlyURL}" class="click-here-link d-none">Learn More</a>
170 </div>
171
172 <div class="product-card-body click-here-box ${suggestedClass}">
173 <p class="mb-1">Stock Number: <b>${curCPCatalogEntry.getName()}</b></p>
174 <h3 class="product-card-title ${suggestedClass}" title="${productName}"><a href="${friendlyURL}" class="color-inherit click-here-link">${productName}</a></h3>
175 <div class="product-card-details">
176 <ul class="prod-main-info">
177 <#if displayPrice[0] == "Yes" && visiblePrice?has_content>
178 <#assign formattedPrice = visiblePrice?string.currency>
179 <li class="prod-price">${formattedPrice}</li>
180 <#else>
181 <li class="prod-price">Call For Pricing</li>
182 </#if>
183 <#if miles != "" && miles != "0">
184 <#assign cleanMiles = miles?replace("[^0-9]", "", "r") />
185 <#assign formattedMiles = cleanMiles?number?string('#,##0.###') />
186 <li class="prod-miles"><span class="miles-text">${formattedMiles}</span> mi</li>
187 </#if>
188 </ul>
189
190 <#if newOrUsed??>
191 <span class="new-or-used-badge">${newOrUsed}</span>
192 </#if>
193 </div>
194 </div>
195
196 <div class="product-card-footer">
197 <#if locationName != "">
198 <div class="product-card-location">
199 <p>Available in: <a href="/product-list?location=${locationId}">${locationName}</a></p>
200 </div>
201 </#if>
202 </div>
203
204 </div>
205 </#list>
206 </#if>
207</div>
Heavy and Medium-Duty Commercial Truck Sales in Baltimore, MD
The Pete Store Baltimore sells heavy and medium-duty commercial trucks for a wide range of jobs. From sleepers, to dump trucks, to specialized applications, we've got you covered. Bundle with flexible financing options to get funding that fits your business plan; Apply today with our easy 3 step application. Our sales staff is available to answer any questions you might have, so feel free to reach out!
Peterbilt Trucks For Sale near Baltimore, MD
For over 50 years, Peterbilt has been synonymous with excellence and reliability in trucking. Our premium Peterbilt trucks are designed for drivers, with thoughtfully designed interiors and quality materials. We have a variety of new trucks in stock at our dealership in Baltimore, MD; browse our inventory today!
Used Commercial Trucks For Sale in Baltimore, MD
We get quality fleet-maintained and owner-operator spec used trucks and put them through a thorough inspection to ensure that they're ready to work. Bundle the affordability of a used truck with a great financing plan from our network of lenders; plus, add an extended warranty for extra protection or shop our Red Oval certified Peterbilts that include a factory warranty.
- Tractors: shop used semi trucks in sleeper or day cab configurations that are specc'ed for a variety of applications from general freight, to flatbed, to liquid bulk. We also have a large inventory of car haulers available.
- Trucks: Shop used dump trucks, box trucks, refuse trucks, and more. Over the years we've served a wide-range of customers in construction, refuse, utility services, refrigerated transports, and more; so we've got the experience to find you the right truck.
Shop by Truck Configuration
Semi Trucks For Sale in Baltimore
Shop semi trucks with sleeper and day cab configurations that are specc'ed for a variety of applications including long-haul, regional haul, dry and liquid bulk, flatbed, heavy haul and more.
Dump Trucks For Sale in Baltimore
We have Maryland spec dump trucks with both steel and aluminum dump bodies. Whether you're looking for a rugged heavy duty dump truck or a versatile medium duty workhorse, we can help you find the right truck for the job. If we don’t have the right truck in stock, we can order it for you and work with our network of body builders to get it upfitted.
Box Trucks For Sale in Baltimore
Get dry van or refrigerated box trucks in a variety of sizes.
Refuse Trucks For Sale in Baltimore
Shop rear loaders, side loaders, roll-offs and more. If we don’t have the right truck on the lot now, we can order you one or find one from another Pete Store location.
Specialized Trucks For Sale in Baltimore
Find other assorted configurations from our combined inventory in new or used condition. We also have cab & chassis trucks that are ready for upfitting from our network of bodybuilders.
