1 | |
2 | type Zoho = { |
3 | token: string; |
4 | }; |
5 | |
6 | * Update custom layouts |
7 | * |
8 | */ |
9 | export async function main( |
10 | auth: Zoho, |
11 | _module: string, |
12 | body: { |
13 | layouts: { |
14 | display_type?: number; |
15 | api_name?: string; |
16 | has_more_profiles: false | true; |
17 | created_time: string; |
18 | modified_time: string; |
19 | visible: false | true; |
20 | source: string; |
21 | id: string; |
22 | name: string; |
23 | display_label: string; |
24 | mode: string; |
25 | subform_properties: { pinned_column: false | true }; |
26 | status: string; |
27 | show_business_card: false | true; |
28 | generated_type: string; |
29 | created_for: { name: string; id: string; email?: string }; |
30 | convert_mapping: { |
31 | Contacts: { name: string; id: string }; |
32 | Deals: { |
33 | fields: { |
34 | api_name?: string; |
35 | field_label?: string; |
36 | id?: string; |
37 | required?: false | true; |
38 | }[]; |
39 | name: string; |
40 | id: string; |
41 | }; |
42 | Accounts: { name: string; id: string }; |
43 | Invoices: { name: string; id: string }; |
44 | SalesOrders: { name: string; id: string }; |
45 | }; |
46 | modified_by: { name: string; id: string; email?: string }; |
47 | profiles: { |
48 | default: false | true; |
49 | name: string; |
50 | id: string; |
51 | _default_view: { name: string; id: string; type: string }; |
52 | _default_assignment_view?: { |
53 | name?: string; |
54 | id?: string; |
55 | type?: string; |
56 | }; |
57 | }[]; |
58 | created_by: { name: string; id: string; email?: string }; |
59 | sections: { |
60 | display_label: string; |
61 | sequence_number: number; |
62 | isSubformSection: false | true; |
63 | tab_traversal: string; |
64 | api_name: string; |
65 | column_count: number; |
66 | name: string; |
67 | generated_type: string; |
68 | id: string; |
69 | type: string; |
70 | fields: { |
71 | required: false | true; |
72 | validation_rule: {}; |
73 | default_value: {}; |
74 | sequence_number: number; |
75 | section_id: number; |
76 | blueprint_supported: false | true; |
77 | json_type: string; |
78 | length: number; |
79 | decimal_place: number; |
80 | multi_module_lookup: {}; |
81 | sharing_properties: { |
82 | scheduler_status?: string; |
83 | share_preference_enabled?: false | true; |
84 | share_permission?: "read-write" | "read-only" | "full-access"; |
85 | }; |
86 | currency: {}; |
87 | file_upolad_optionlist: { |
88 | actual_value: string; |
89 | display_value: string; |
90 | }[]; |
91 | lookup: {}; |
92 | subform: {}; |
93 | formula: {}; |
94 | multiselectlookup: {}; |
95 | multiuserlookup: { |
96 | display_label: string; |
97 | linking_module: { |
98 | api_name: string; |
99 | id: string; |
100 | module_name?: string; |
101 | module?: string; |
102 | }; |
103 | connected_module: { |
104 | api_name: string; |
105 | id: string; |
106 | module_name?: string; |
107 | module?: string; |
108 | }; |
109 | lookup_apiname: string; |
110 | api_name: string; |
111 | connectedfield_apiname: string; |
112 | connectedlookup_apiname: string; |
113 | id: string; |
114 | record_access: false | true; |
115 | }; |
116 | pick_list_values: { |
117 | colour_code: string; |
118 | actual_value: string; |
119 | type: "unused" | "used"; |
120 | id: string; |
121 | sequence_number: number; |
122 | display_value: string; |
123 | reference_value?: string; |
124 | deal_category?: string; |
125 | probability?: number; |
126 | forecast_category?: { id?: string; name?: string }; |
127 | expected_data_type?: string; |
128 | sys_ref_name?: string; |
129 | forecast_type?: string; |
130 | maps?: { api_name?: string; pick_list_values?: {}[] }[]; |
131 | _delete?: false | true; |
132 | show_value?: false | true; |
133 | }[]; |
134 | allowed_modules: { |
135 | api_name: string; |
136 | id: string; |
137 | module_name?: string; |
138 | module?: string; |
139 | }[]; |
140 | hipaa_compliance_enabled: false | true; |
141 | hipaa_compliance: { |
142 | restricted_in_export: false | true; |
143 | restricted: false | true; |
144 | }; |
145 | static_values: { |
146 | sequence_number: number; |
147 | id: string; |
148 | value: string; |
149 | }[]; |
150 | static_field: false | true; |
151 | layout_associations: { api_name: string; name: string; id: string }[]; |
152 | _delete: { permanent: false | true }; |
153 | associated_module: { |
154 | api_name: string; |
155 | id: string; |
156 | module_name?: string; |
157 | module?: string; |
158 | }; |
159 | data_type: string; |
160 | operation_type: { |
161 | web_update: false | true; |
162 | api_create: false | true; |
163 | web_create: false | true; |
164 | api_update: false | true; |
165 | }; |
166 | system_mandatory: false | true; |
167 | webhook: false | true; |
168 | virtual_field: false | true; |
169 | field_read_only: false | true; |
170 | customizable_properties: string[]; |
171 | read_only: false | true; |
172 | custom_field: false | true; |
173 | businesscard_supported: false | true; |
174 | filterable: false | true; |
175 | visible: false | true; |
176 | available_in_user_layout: false | true; |
177 | display_field: false | true; |
178 | pick_list_values_sorted_lexically: false | true; |
179 | sortable: false | true; |
180 | separator: false | true; |
181 | searchable: false | true; |
182 | enable_colour_code: false | true; |
183 | mass_update: false | true; |
184 | created_source: string; |
185 | type: string; |
186 | display_label: string; |
187 | column_name: string; |
188 | api_name: string; |
189 | display_type: number; |
190 | ui_type: number; |
191 | colour_code_enabled_by_system: false | true; |
192 | quick_sequence_number: string; |
193 | email_parser: { |
194 | fields_update_supported: false | true; |
195 | record_operations_supported: false | true; |
196 | }; |
197 | rollup_summary: {}; |
198 | refer_from_field: { id: string; api_name: string }; |
199 | created_time: string; |
200 | modified_time: string; |
201 | show_type: number; |
202 | category: number; |
203 | id: string; |
204 | profiles: { name: string; id: string; permission_type: string }[]; |
205 | view_type: { |
206 | view: false | true; |
207 | edit: false | true; |
208 | quick_create: false | true; |
209 | create: false | true; |
210 | }; |
211 | unique: {}; |
212 | sub_module: { |
213 | api_name: string; |
214 | id: string; |
215 | module_name?: string; |
216 | module?: string; |
217 | }; |
218 | external: { |
219 | show: false | true; |
220 | type: string; |
221 | allow_multiple_config?: false | true; |
222 | }; |
223 | private?: { |
224 | restricted: false | true; |
225 | type: string; |
226 | export: false | true; |
227 | }; |
228 | convert_mapping: { |
229 | Contacts?: string; |
230 | Deals?: string; |
231 | Accounts?: string; |
232 | }; |
233 | autonumber: { |
234 | starting_number_length: number; |
235 | prefix: string; |
236 | suffix: string; |
237 | start_number: number; |
238 | }; |
239 | auto_number: {}; |
240 | crypt: { |
241 | mode: string; |
242 | status: number; |
243 | column?: string; |
244 | table?: string; |
245 | encFldIds?: string[]; |
246 | notify?: string; |
247 | }; |
248 | tooltip: { name: string; value: string }; |
249 | history_tracking: { |
250 | module: { |
251 | layout?: { |
252 | display_type?: number; |
253 | api_name?: string; |
254 | has_more_profiles: false | true; |
255 | created_time: string; |
256 | modified_time: string; |
257 | visible: false | true; |
258 | source: string; |
259 | id: string; |
260 | name: string; |
261 | display_label: string; |
262 | mode: string; |
263 | subform_properties: { pinned_column: false | true }; |
264 | status: string; |
265 | show_business_card: false | true; |
266 | generated_type: string; |
267 | created_for: { name: string; id: string; email?: string }; |
268 | convert_mapping: { |
269 | Contacts: { name: string; id: string }; |
270 | Deals: { |
271 | fields: { |
272 | api_name?: string; |
273 | field_label?: string; |
274 | id?: string; |
275 | required?: false | true; |
276 | }[]; |
277 | name: string; |
278 | id: string; |
279 | }; |
280 | Accounts: { name: string; id: string }; |
281 | Invoices: { name: string; id: string }; |
282 | SalesOrders: { name: string; id: string }; |
283 | }; |
284 | modified_by: { name: string; id: string; email?: string }; |
285 | profiles: { |
286 | default: false | true; |
287 | name: string; |
288 | id: string; |
289 | _default_view: { name: string; id: string; type: string }; |
290 | _default_assignment_view?: { |
291 | name?: string; |
292 | id?: string; |
293 | type?: string; |
294 | }; |
295 | }[]; |
296 | created_by: { name: string; id: string; email?: string }; |
297 | sections: { |
298 | display_label: string; |
299 | sequence_number: number; |
300 | isSubformSection: false | true; |
301 | tab_traversal: string; |
302 | api_name: string; |
303 | column_count: number; |
304 | name: string; |
305 | generated_type: string; |
306 | id: string; |
307 | type: string; |
308 | fields: { |
309 | required: false | true; |
310 | validation_rule: {}; |
311 | default_value: {}; |
312 | sequence_number: number; |
313 | section_id: number; |
314 | blueprint_supported: false | true; |
315 | json_type: string; |
316 | length: number; |
317 | decimal_place: number; |
318 | multi_module_lookup: {}; |
319 | sharing_properties: { |
320 | scheduler_status?: string; |
321 | share_preference_enabled?: false | true; |
322 | share_permission?: |
323 | | "read-write" |
324 | | "read-only" |
325 | | "full-access"; |
326 | }; |
327 | currency: {}; |
328 | file_upolad_optionlist: { |
329 | actual_value: string; |
330 | display_value: string; |
331 | }[]; |
332 | lookup: {}; |
333 | subform: {}; |
334 | formula: {}; |
335 | multiselectlookup: {}; |
336 | multiuserlookup: { |
337 | display_label: string; |
338 | linking_module: { |
339 | api_name: string; |
340 | id: string; |
341 | module_name?: string; |
342 | module?: string; |
343 | }; |
344 | connected_module: { |
345 | api_name: string; |
346 | id: string; |
347 | module_name?: string; |
348 | module?: string; |
349 | }; |
350 | lookup_apiname: string; |
351 | api_name: string; |
352 | connectedfield_apiname: string; |
353 | connectedlookup_apiname: string; |
354 | id: string; |
355 | record_access: false | true; |
356 | }; |
357 | pick_list_values: { |
358 | colour_code: string; |
359 | actual_value: string; |
360 | type: "unused" | "used"; |
361 | id: string; |
362 | sequence_number: number; |
363 | display_value: string; |
364 | reference_value?: string; |
365 | deal_category?: string; |
366 | probability?: number; |
367 | forecast_category?: { id?: string; name?: string }; |
368 | expected_data_type?: string; |
369 | sys_ref_name?: string; |
370 | forecast_type?: string; |
371 | maps?: { api_name?: string; pick_list_values?: {}[] }[]; |
372 | _delete?: false | true; |
373 | show_value?: false | true; |
374 | }[]; |
375 | allowed_modules: { |
376 | api_name: string; |
377 | id: string; |
378 | module_name?: string; |
379 | module?: string; |
380 | }[]; |
381 | hipaa_compliance_enabled: false | true; |
382 | hipaa_compliance: { |
383 | restricted_in_export: false | true; |
384 | restricted: false | true; |
385 | }; |
386 | static_values: { |
387 | sequence_number: number; |
388 | id: string; |
389 | value: string; |
390 | }[]; |
391 | static_field: false | true; |
392 | layout_associations: { |
393 | api_name: string; |
394 | name: string; |
395 | id: string; |
396 | }[]; |
397 | _delete: { permanent: false | true }; |
398 | associated_module: { |
399 | api_name: string; |
400 | id: string; |
401 | module_name?: string; |
402 | module?: string; |
403 | }; |
404 | data_type: string; |
405 | operation_type: { |
406 | web_update: false | true; |
407 | api_create: false | true; |
408 | web_create: false | true; |
409 | api_update: false | true; |
410 | }; |
411 | system_mandatory: false | true; |
412 | webhook: false | true; |
413 | virtual_field: false | true; |
414 | field_read_only: false | true; |
415 | customizable_properties: string[]; |
416 | read_only: false | true; |
417 | custom_field: false | true; |
418 | businesscard_supported: false | true; |
419 | filterable: false | true; |
420 | visible: false | true; |
421 | available_in_user_layout: false | true; |
422 | display_field: false | true; |
423 | pick_list_values_sorted_lexically: false | true; |
424 | sortable: false | true; |
425 | separator: false | true; |
426 | searchable: false | true; |
427 | enable_colour_code: false | true; |
428 | mass_update: false | true; |
429 | created_source: string; |
430 | type: string; |
431 | display_label: string; |
432 | column_name: string; |
433 | api_name: string; |
434 | display_type: number; |
435 | ui_type: number; |
436 | colour_code_enabled_by_system: false | true; |
437 | quick_sequence_number: string; |
438 | email_parser: { |
439 | fields_update_supported: false | true; |
440 | record_operations_supported: false | true; |
441 | }; |
442 | rollup_summary: {}; |
443 | refer_from_field: { id: string; api_name: string }; |
444 | created_time: string; |
445 | modified_time: string; |
446 | show_type: number; |
447 | category: number; |
448 | id: string; |
449 | profiles: { |
450 | name: string; |
451 | id: string; |
452 | permission_type: string; |
453 | }[]; |
454 | view_type: { |
455 | view: false | true; |
456 | edit: false | true; |
457 | quick_create: false | true; |
458 | create: false | true; |
459 | }; |
460 | unique: {}; |
461 | sub_module: { |
462 | api_name: string; |
463 | id: string; |
464 | module_name?: string; |
465 | module?: string; |
466 | }; |
467 | external: { |
468 | show: false | true; |
469 | type: string; |
470 | allow_multiple_config?: false | true; |
471 | }; |
472 | private?: { |
473 | restricted: false | true; |
474 | type: string; |
475 | export: false | true; |
476 | }; |
477 | convert_mapping: { |
478 | Contacts?: string; |
479 | Deals?: string; |
480 | Accounts?: string; |
481 | }; |
482 | autonumber: { |
483 | starting_number_length: number; |
484 | prefix: string; |
485 | suffix: string; |
486 | start_number: number; |
487 | }; |
488 | auto_number: {}; |
489 | crypt: { |
490 | mode: string; |
491 | status: number; |
492 | column?: string; |
493 | table?: string; |
494 | encFldIds?: string[]; |
495 | notify?: string; |
496 | }; |
497 | tooltip: { name: string; value: string }; |
498 | history_tracking: {}; |
499 | association_details: { |
500 | related_field: { |
501 | api_name: string; |
502 | id: string; |
503 | module_name?: string; |
504 | module?: string; |
505 | }; |
506 | lookup_field: { |
507 | api_name: string; |
508 | id: string; |
509 | module_name?: string; |
510 | module?: string; |
511 | }; |
512 | }; |
513 | additional_column: string; |
514 | field_label: string; |
515 | "common.picklist": {}; |
516 | _update_existing_records: false | true; |
517 | number_separator: false | true; |
518 | textarea: { type?: string }; |
519 | }[]; |
520 | properties: { |
521 | reorder_rows: false | true; |
522 | maximum_rows: number; |
523 | tooltip: { name?: "Info Icon"; value?: string }; |
524 | }; |
525 | _delete: { permanent: false | true }; |
526 | }[]; |
527 | actions_allowed: { |
528 | edit: false | true; |
529 | rename: false | true; |
530 | clone: false | true; |
531 | downgrade: false | true; |
532 | delete: false | true; |
533 | deactivate: false | true; |
534 | set_layout_permissions: false | true; |
535 | }; |
536 | }; |
537 | display_label?: string; |
538 | api_name?: string; |
539 | module?: {}; |
540 | id?: string; |
541 | module_name?: string; |
542 | }; |
543 | duration_configured_field: { |
544 | api_name: string; |
545 | id: string; |
546 | module_name?: string; |
547 | module?: string; |
548 | }; |
549 | }; |
550 | association_details: { |
551 | related_field: { |
552 | api_name: string; |
553 | id: string; |
554 | module_name?: string; |
555 | module?: string; |
556 | }; |
557 | lookup_field: { |
558 | api_name: string; |
559 | id: string; |
560 | module_name?: string; |
561 | module?: string; |
562 | }; |
563 | }; |
564 | additional_column: string; |
565 | field_label: string; |
566 | "common.picklist": {}; |
567 | _update_existing_records: false | true; |
568 | number_separator: false | true; |
569 | textarea: { type?: string }; |
570 | }[]; |
571 | properties: { |
572 | reorder_rows: false | true; |
573 | maximum_rows: number; |
574 | tooltip: { name?: "Info Icon"; value?: string }; |
575 | }; |
576 | _delete: { permanent: false | true }; |
577 | }[]; |
578 | actions_allowed: { |
579 | edit: false | true; |
580 | rename: false | true; |
581 | clone: false | true; |
582 | downgrade: false | true; |
583 | delete: false | true; |
584 | deactivate: false | true; |
585 | set_layout_permissions: false | true; |
586 | }; |
587 | }[]; |
588 | }, |
589 | ) { |
590 | const url = new URL(`https://zohoapis.com/crm/v8/settings/layouts`); |
591 | for (const [k, v] of [["module", _module]]) { |
592 | if (v !== undefined && v !== "" && k !== undefined) { |
593 | url.searchParams.append(k, v); |
594 | } |
595 | } |
596 | const response = await fetch(url, { |
597 | method: "PATCH", |
598 | headers: { |
599 | "Content-Type": "application/json", |
600 | Authorization: "Zoho-oauthtoken " + auth.token, |
601 | }, |
602 | body: JSON.stringify(body), |
603 | }); |
604 | if (!response.ok) { |
605 | const text = await response.text(); |
606 | throw new Error(`${response.status} ${text}`); |
607 | } |
608 | return await response.json(); |
609 | } |
610 |
|