Hi Mark,
Life sure is getting better for the folks that are having the privilege to be using Indicium and not the Basic version we still have to use for a great part of our applications. But even with the current version of the platform using Indicium there are still plenty challenges left for me, so for example, I have this error in the indicium log:
2024-08-06T12:04:07.0519888+02:00 800012bc-0001-ea00-b63f-84710c7967bb [ERR] An unhandled exception occurred while processing the request. (ffba027a)
Indicium.Shared.TSF.FatalDbException (0x80004005): The following query failed with an exception: '--'
---> Indicium.Data.Shared.CustomDbException (0x00000AFC): Could not find stored procedure '--'.
The infamous “by The Request”. Now which (http?)request was that, coming out of which action, by whom, was that a trigger, part of a template call from something?
Here is another one:
2024-08-06T12:50:17.7673259+02:00 800000ea-0002-d700-b63f-84710c7967bb [ERR] An unhandled exception occurred while processing the request. (ffba027a)
Indicium.Shared.TSF.FatalDbException (0x80004005): The following query failed with an exception: 'UPDATE t1
SET t1.[system_company_id] = @p0, t1.[calculation_id] = @p1, t1.[calculation_structure_id] = @p2, t1.[system_administration_id] = @p3, t1.[calculation_specification_line_order_no] = @p4, t1.[resource_work_id] = @p5, t1.[resource_type_code] = @p6, t1.[resource_id] = @p7, t1.[calculation_specification_line_description] = @p8, t1.[quantity_internal] = @p9, t1.[quantity_external] = @p10, t1.[unit_id] = @p11, t1.[gross_price_per_unit] = @p12, t1.[discount_percentage_internal] = @p13, t1.[discount_percentage_external] = @p14, t1.[allowance_percentage_internal] = @p15, t1.[allowance_percentage_external] = @p16, t1.[net_price_per_unit_internal] = @p17, t1.[net_price_per_unit_external] = @p18, t1.[net_price_per_unit_external_inc_general_cost] = @p19, t1.[net_price_total_external_inc_general_cost] = @p20, t1.[net_price_total_external_inc_multiplier_and_general_cost] = @p21, t1.[resource_base_time_operation_id] = @p22, t1.[base_time_operation_id] = @p23, t1.[base_time_internal] = @p24, t1.[base_time_external] = @p25, t1.[correction_factor_internal] = @p26, t1.[correction_factor_external] = @p27, t1.[base_time_correction_internal] = @p28, t1.[base_time_correction_external] = @p29, t1.[hour_rate_internal] = @p30, t1.[hour_rate_external] = @p31, t1.[work_internal] = @p32, t1.[work_external] = @p33, t1.[hour_rate_external_inc_general_cost] = @p34, t1.[mamok_code_general] = @p35, t1.[mamok_code_work] = @p36, t1.[subtotal_material_internal] = @p37, t1.[subtotal_material_external] = @p38, t1.[subtotal_work_internal] = @p39, t1.[subtotal_work_external] = @p40, t1.[subtotal_equipment_internal] = @p41, t1.[subtotal_equipment_external] = @p42, t1.[subtotal_service_internal] = @p43, t1.[subtotal_service_external] = @p44, t1.[subtotal_cost_internal] = @p45, t1.[subtotal_cost_external] = @p46, t1.[work_total_external_inc_general_cost] = @p47, t1.[work_total_external_inc_multiplier_and_general_cost] = @p48, t1.[total_external_inc_general_cost] = @p49, t1.[total_internal_including_multiplier] = @p50, t1.[total_external_including_multiplier] = @p51, t1.[total_external_including_multiplier_and_general_cost] = @p52, t1.[margin_total] = @p53, t1.[estimated_budget_type] = @p54, t1.[calculation_specification_line_memo_internal] = @p55, t1.[calculation_specification_line_memo_external] = @p56, t1.[relation_id] = @p57, t1.[external_structure_reference_id] = @p58, t1.[recipe_has_fixed_price] = @p59, t1.[vat_rate_id] = @p60, t1.[resource_work_vat_rate_id] = @p61, t1.[work_process_id] = @p62, t1.[calculation_specification_line_skip_update] = @p63, t1.[resource_class_id] = @p64, t1.[gln_number] = @p65, t1.[ignore_trigger] = @p66, t1.[trade_item_code] = @p67, t1.[existing_inhabited_2ba] = @p68, t1.[existing_empty_2ba] = @p69, t1.[new_single_2ba] = @p70, t1.[new_repeating_2ba] = @p71, t1.[is_composed_allowance] = @p72, t1.[resource_from_online] = @p73, t1.[connection_supplier_id] = @p74, t1.[instruction_pre_calculation_specification_id] = @p75, t1.[new_selectonline_line] = @p76, t1.[resource_gln_number] = @p77, t1.[resource_code] = @p78, t1.[cost_type_id] = @p79, t1.[cost_type_work_id] = @p80, t1.[resource_discount_net_price] = @p81, t1.[price_list_discount] = @p82, t1.[vat_amount_total] = @p83, t1.[vat_amount_per_unit] = @p84, t1.[calculation_specification_line_discount_percentage] = @p85, t1.[has_document] = @p86, t1.[apply_calculation_rules] = @p87, t1.[source_calculation_id] = @p88, t1.[source_calculation_specification_line_id] = @p89, t1.[price_indication] = @p90, t1.[insert_user] = @p91, t1.[insert_date_time] = @p92, t1.[update_user] = @p93, t1.[update_date_time] = @p94
FROM [calculation_specification_line] t1
WHERE t1.[system_company_id] = @p95 AND t1.[calculation_id] = @p96 AND t1.[calculation_specification_line_id] = @p97'
---> Microsoft.Data.SqlClient.SqlException (0x80131904): Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
Now somewhere between @p1..@pNN should be an overflow of something…
Funny thing in the above one, is that it is a 500 Server error that it corresponds to, while in my humble opinion it should register as an application error. (Despite the probable fact that this was bad error handling in the first place)
Surely I can relate to that I also do not want to explicitly monitor users, but it still would be very convenient to see the journey someone made through my application(s). Still, many errors are due to data related items, which are, as expected, build up through said journey.
Currently I am still collecting the IIS logfiles and (try to) match the related indicium errors. This brings a lot of false positives if your’re not familiar with the code that is behind all of these requests...