Another round of deprecations

It is time for another round of removing deprecated/legacy web service methods from the API.

This time around we are going to primarily remove methods related to creating customers and subscriptions, as well as removing the legacy creditcard/payment API.

Deprecating Subscription Creation

We have a long list of methods that have popped up over the years for creating new subscribers with various parameters, all of which was finally replaced with a common shared routine as described on the documentation site.
The methods that will be removed from version 3.8 in the spring of 2017 are as follows:

        • SaveNewSubscriptionToExistingCustomer
      • SaveNewSubscription
      • SaveNewSubscriptionExtended
      • SaveNewSubscriptionExtended2
      • SaveNewSubscriptionExtended3
      • SaveNewSubscriptionWithOtherBillPayer
      • SaveNewSubscriptionWithOtherBillPayerAddress
      • SaveNewSubscriptionOtherBillPayerAdrExtended
      • SaveNewSubscriptionOtherBillPayerAdrExtended2
      • CreateSubscription
      • SaveRestart
      • SaveRestart2
      • SaveRestart3
      • CreateOrUpdateCustomer

All of the above methods can be replaced by the careful use of the OrderSubscription method.

Payment API Version1

Our first, and rather failed, attempt at creating a credit card payment API has not been actively supported in years, and hopefully no one is using any parts of it any longer. Thus without further ado, we will remove an entire endpoint and two support methods from the InfoWebXmlWebservice endpoint by version 3.8.

  • InfoWebPaymentServices
  • AddPaymentTransaction
  • GetCustomersCreditCardNumberByLogin

The entire credit card API has been replaced so there are no direct alternatives, but head over to the section on credit card payments to get some info on implementing credit card payments using the new api.

Various Legacy methods with better alternatives

Additionally we got some methods which have had better alternatives for quite a while, but does not fall into a specific category. As far as we can tell from our statistics they are still in use to some degree, but they should really be replaced!

All of the above methods lives in the InfoWebXmlWebservice endpoint.

INFO-Web

Finally we forgot to remove a few INFO-Web helper methods in 3.7:

  • GetInfoWebTexts
  • CustomerAddressLabel

There are no alternatives for these methods (and as far as we can tell nobody but the Infosoft Web Client ever used these!).

As always if this cause problems for you, contact support and let us know and we will look into it.

In pursuit of “better” software

This post is not about features of the application or new shiny things, but rather a description of what we are doing internally to provide you with better/more robust software.
The term “better” is of course subjective, but at least then software with fewer errors in it!

Errors in the wild

As mentioned a few times earlier we track errors as they occur in the wild, and we have been doing that for some time now (roughly two years). Doing that has allowed us to give you users better error messages and better overall error handling as well as avoiding a heap of errors. Analysing the session results over time we have observed that the number of sessions with unhandled/unexplained error messages have decreased, but still up to 20% of all session experience some sort of error.

We have taken care of all the low hanging fruit, the error messages that happen now are often rather cryptic and even though they point to a place in the application where the error was triggered, there is no easy way to tell what actually caused the error. For instance most, if not all, of our users have seen errors messages such as “The Data Has Changed Since You Read Them, Please Try Again” or “Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints”. The first message might actually be legit, but in most cases it is not, rather it is an unfortunate sequence of read, update, insert and delete actions that causes the storage layer of the application to be confused. The latter is always a case of the application not handling its own data relationships in the proper way. Now both of these might sound easy to fix, but sometimes the sequences that precedes such an error is so “weird” or long that we are unable to reproduce it, and when the error is reported the users can’t remember the steps either.

The Taskforce

In an attempt to figure out what these errors are, we decided to set down a task force which job it is to continuously monitor errors as they come in, and try to reproduce it immediately. This also means taking contact with the customer/person who experienced the error and have him/her explain (if possible) what was done to provoke the error.

Currently we are focusing on errors from the latest 3.6.0.1 release and ignoring everything else, so anything from beta releases or older releases will not be examined by the task force (feel free to report them anyway).

We hope that this initiative will take care of some of the more difficult and annoying problems that you as users experience.

Analysing Source Code

Another related initiative in the developer group is the use of a new static code analysis suite. The use of static code analysis is nothing new, but often static code analysis tools focus on a very broad set of best coding practices for a given language. The tool we have deployed takes another approach and only focuses on things that will result in actual errors when running the application. It helps us to avoid writing code with hard to find errors such as resource/memory leaks and threading issues. Of course it also helps with less hard to find issues such as null reference problems.

For the foreseeable future the goal is to not add more errors, once we get comfortable with the tooling, we will start investigating the backlog to remove possible errors already present in the code base.

There is a backlog, but having spent a large part of the last 3 years changing the internal procedures and hunting specific error types we are already a long way, and the amount of so called “High Impact” issues (i.e. bad errors) is actually rather small (both in relative and absolute terms).

Hopefully both of these initiatives will provide you with “better” software over the following releases. We do still need your help however, so continue to submit issues to support as you find them.

201-01 test
299-01 test
300-209 test
3I0-012 test
500-051 test
70-462 test
70-461 test
070-410 test
JN0-102 test
70-411 test
C_TADM51_731 test
C4090-958 test
70-483 test
EX300 test
070-461 test
MB2-702 test
MB7-702 test
220-802 test
400-101 exams
646-206 exams
700-501 exams
70-480 exams
C4040-108 exams
MB2-701 exams
070-411 exams
100-101 exams
640-554 exams
700-505 exams
70-457 exams
70-460 exams
C2150-197 exams
EX0-001 exams
070-243 exams
70-466 exams
C_THR12_66 test
C4040-225 test
1Z0-061 test
70-347 test
C4090-452 test
VCP-550 test
070-177 test
070-412 test
70-417 test
70-463 test
70-488 test
C_HANATEC131 test
C2090-303 test
C2090-614 test
70-331 test
MB5-705 test
070-247 test
070-347 test
070-463 test
300-206 exam dumps
70-243 exam dumps
74-325 exam dumps
C2020-622 exam dumps
C2030-283 exam dumps
C2090-540 exam dumps
C2180-278 braindumps
HP0-J73 braindumps
ICBB braindumps
070-246 braindumps
070-341 braindumps
070-417 braindumps
070-457 braindumps
070-458 braindumps
1Z0-481 braindumps
1Z0-599 braindumps
300-207 braindumps
70-246 braindumps
70-414 braindumps
A00-240 braindumps
C_TAW12_731 braindumps
400-101 braindumps
70-410 exam dumps
050-SEPROAUTH-02 exam dumps
200-120 exam dumps
MB2-703 exam dumps
070-462 exam dumps
70-462 exam dumps
70-461 exam dumps
070-410 exam dumps
JN0-102 exam dumps
70-411 exam dumps
C_TADM51_731 exam dumps
C4090-958 exam dumps
70-483 exam dumps
EX300 exam dumps
070-461 exam dumps
MB2-702 exam dumps
MB7-702 exam dumps
220-802 exam dumps
400-101 exam dumps
646-206 exam dumps
700-501 exam dumps
70-480 exam dumps
C4040-108 exam dumps
MB2-701 exam dumps
070-411 exam dumps
100-101 exam dumps
640-554 exam dumps
700-505 exam dumps
70-457 exam dumps
70-460 exam dumps
C2150-197 exam dumps
EX0-001 exam dumps
070-243 exam dumps
70-466 exam dumps
C_THR12_66 exam dumps
C4040-225 exam dumps
1Z0-061 exam dumps
70-347 exam dumps
C4090-452 exam dumps
VCP-550 exam dumps
070-177 exam dumps
070-412 exam dumps
70-417 exam dumps
70-463 exam dumps
70-488 exam dumps
C_HANATEC131 exam dumps
C2090-303 exam dumps
C2090-614 exam dumps
70-331 exam dumps
MB5-705 exams
070-247 exams
070-347 exams
070-463 exams
300-206 exams
400-101 exams
70-410 exams
050-SEPROAUTH-02 exams
200-120 exams
MB2-703 exams
070-462 exams
70-462 exams
70-461 exams
070-410 exams
JN0-102 exams
70-411 exams
C_TADM51_731 exams
C4090-958 exams
70-483 exams
EX300 exams
070-461 exams
MB2-702 exams
MB7-702 exams
220-802 exams
400-101 exams
646-206 exams
070-247 test
070-347 test
070-463 test
300-206 exam dumps
70-243 exam dumps
74-325 exam dumps
C2020-622 exam dumps
C2030-283 exam dumps
C2090-540 exam dumps
C2180-278 braindumps
HP0-J73 braindumps
ICBB braindumps
070-246 braindumps
070-341 braindumps
070-417 braindumps
070-457 braindumps
070-458 braindumps
1Z0-481 braindumps
1Z0-599 braindumps
300-207 braindumps
70-246 braindumps
70-414 braindumps
A00-240 braindumps
C_TAW12_731 braindumps
70-243 exams
E10-001 exams
70-410 exams
1Z0-062 exams
70-466 exams
200-101 exams
70-489 exams
MB2-701 exams
640-864 exams
A00-211 exams
C_TAW12_731 exams
70-410 exams
400-101 exams
70-410 exams
050-SEPROAUTH-02 exams
200-120 exams
MB2-703 exams
070-462 exams
70-462 exams
70-461 exams
070-410 exams
A00-240 exam
C_TAW12_731 exam
C4030-670 exam
C4040-224 exam
C4090-450 exam
C4120-783 exam
EX200 exam
MB2-700 exam
MB3-700 exam
MB6-869 exam
OG0-093 exam

INFO-Web support webservices to be removed

As you might have noticed INFO-Web, the old self-service web client, is being discontinued. There is a “modern” replacement called INFO-Cweb which everyone with an INFO-Web license should have received an upgrade offer for.

As a result of INFO-Web being replaced, a series of compatibility webservice methods are no longer needed, as there are other and better ways to achieve the same results.

The following methods will be removed starting with version 3.7 (Fall 2016)

  • GetPasswordByUsername
  • GetUsernameByCustomerNumberAndTitle
  • SaveNewWebUser
  • SavePassword
  • UpdateWebUser
  • UpdateWebUserSimple
  • VerifyUsernameAndPassword
  • VerifyUssernameAndPasswordExtended
  • CreateAddiotnalWebUser  (An old broken version of family/shared subscriptions)

All of these can somehow be replaced by using the User Register (See the user register introduction on the api documentation site).
Please note that the backend for usernames and passwords is not the same, if you want to migrate the users from the old backend to the user register there is an option for it in the INFO-Script helper application. Please contact Infosoft before you run the migration, it won’t destroy anything but it might be easier if you know exactly what it does.

Behaviour Change

The following methods have their behaviour changed:

  • SaveCustomerInformation

The methods will do various verification checks against the INFO-Web username/password store, and update the username in cases where there is an email change. This behaviour is now removed so updating a customer will not directly affect a user.

To achieve the same thing, update the user while updating the customer.

 

As always, contact Infosoft support if you have questions regarding the changes.

400-101
70-410
70-483
200-120
MB2-703
070-462
70-462
70-461
070-410
JN0-102
70-411
312-50v8 dumps
70-466 dumps
4A0-104 dumps
C4040-250 dumps
HP2-T23 dumps
2V0-620 dumps
1Z0-147 dumps
CCD-410 dumps
HP2-Z34 dumps
1Z0-883 dumps
70-465 test
70-467 test
70-484 test
70-485 test
74-338 test
74-344 test
810-420 test
98-367 test
C_HANASUP_1 test
C_TSCM52_66 test
70-410 test
050-SEPROAUTH-02 test
200-120 test
MB2-703 test
070-462 test
70-462 test
70-461 test
070-410 test
JN0-102 test
70-411 test
C_TADM51_731 test
C4090-958 test
70-483 test
EX300 test
070-461 test
MB2-702 test
MB7-702 test
220-802 test
400-101 test
646-206 test
700-501 test
70-480 test
C4040-108 test
MB2-701 test
070-411 test
100-101 test
640-554 test
700-505 test
70-457 test
70-460 test
C2150-197 test
EX0-001 test
070-243 test
70-466 test
C_THR12_66 test
C4040-225 test
1Z0-061 test
70-347 test
C4090-452 test
VCP-550 test
070-177 test
070-412
70-417
201-01 test
299-01 test
300-209 test
3I0-012 test
500-051 test
70-462 test
70-461 test
070-410 test
100-101 exams
640-554 exams
700-505 exams
70-457 exams
70-460 exams
C2150-197 exams
EX0-001 exams
070-243 exams
70-466 exams
C4040-221 dumps
1Z0-599 dumps
350-029 dumps
820-421 dumps
C_THR12_66 dumps
117-102 dumps
70-342 dumps
70-460 dumps
74-338 dumps
MB6-871 dumps
200-101 dumps
70-484 dumps
C2090-303 dumps
MB6-886 dumps
70-410 exams
400-101 exams
70-410 exams
050-SEPROAUTH-02 exams
200-120 exams
MB2-703 exams
070-462 exams
70-462 exams
70-461 exams
070-410 exams
JN0-102 exams
70-243 exams
E10-001 exams
70-410 exams
1Z0-062 exams
70-466 exams
200-101 exams
70-489 exams
MB2-701 exams
640-864 exams
A00-211 exams
C_TAW12_731 exams
070-177 test
070-412 test
70-417 test
70-463 test
70-488 test
C_HANATEC131 test
C2090-303 test
C2090-614 test
70-331 test
MB5-705 test
070-247 test
070-347 test
070-463 test
300-206 exam dumps
70-243 exam dumps
74-325 exam dumps
C2020-622 exam dumps

.NET Framwork Upgrade

Starting with version 3.7 (to be released in the beginning of Q4 2016), the Infosystems suite will require .NET Framework 4.6.1 to run.

Refer to https://msdn.microsoft.com/en-us/library/8z6watww(v=vs.110).aspx for details on what that means in terms of systems requirements.

Note especially that Windows Server 2008 is no longer officially supported (reports says it actually works, but you are on your own if you choose this path).
Windows Server 2008 R2 is still supported.

.NET 4.6.1 is backwards compatible with .NET 4.5 that is currently required, so go ahead and install the new version now :)

MB2-700 test
MB3-700 test
MB6-869 test
OG0-093 test
VCP-510 test
VCP550 test
070-178 test
070-331 test
400-101 test
70-410 test
070-341 exams
070-417 exams
070-457 exams
400-101 exams
70-410 exams
050-SEPROAUTH-02 exams
200-120 exams
MB2-703 exams
070-462 exams
70-462 exams
70-461 exams
070-410 exams
JN0-102 exams
70-411 exams
C_TADM51_731 exams
C4090-958 exams
70-483 exams
EX300
70-412 dumps
70-458 dumps
70-486 dumps
820-421 dumps
820-422 dumps
C2170-008 dumps
C2180-275 dumps
C2180-276 dumps
C4040-123 dumps
JN0-343 dumps
400-101 dumps
70-410 dumps
050-SEPROAUTH-02 dumps
200-120 dumps
MB2-703 dumps
C2180-278
HP0-J73 exams
ICBB exams
070-246 exams
070-341 exams
070-417 exams
HP0-S41
HP2-B115
C4040-251
101
9L0-422
70-534
98-349
70-341
300-208
700-501
CCA-500
N10-005
70-243
E10-001
350-018
C_TSCM52_66
C_A1FIN_10
EX300
DEV-501
70-680
C_HANASUP_1
700-701
98-367
77-881
70-688
70-683
1Z0-062
70-466
200-101
70-489
200-120
220-801
100-101
200-101
3I0-012 exams
500-051 exams
640-461 exams
640-864 exams
642-813 exams
642-832 exams
700-038 exams
70-410 exams
70-496 exams
70-646 exams
70-680 exams
70-684 exams
74-343 exams
77-888 exams
98-361 exams
A2010-505 exams
A4040-226 exams
C_GRCAC_10 exams
C_HANAIMP131 exams
C_TBW45_70 exams
C_TBW55_73 exams
C_TFIN52_66 exams
C2010-570 exams
C2020-001 exams
C2020-702 exams
C2020-703 exams
C2040-406 exams
C2040-407 exams
C2040-840 exams
C2050-241 exams
C2070-588 exams
C2180-400 exams
C4060-156 exams
C4090-451 exams
CAT-060 exams
CCA-410 exams
CLO-001 exams
CSSGB exams
CV0-001 exams
E20-335 exams
HP0-Y46 exams
IBMSPSSMPRO exams
M2020-615 exams
M2070-640 exams
MB6-886 exams
MB7-700 exams
N10-005 exams
SK0-003 exams
ST0-237 exams
VCP5-DCV exams
3101 exams
3107 exams
3300 exams
400-101 exams
70-410 exams
050-SEPROAUTH-02 exams
200-120 exams
MB2-703 exams
070-462 exams
70-462 exams
70-461 exams
070-410 exams
JN0-102 exams
70-411 exams
C_TADM51_731 exams
C4090-958 exams
70-483 exams
EX300 exams
070-461 exams
MB2-702 exams
MB7-702 exams
220-802 exams
400-101 exams
646-206 exams
700-501 exams
70-480 exams
C4040-108 exams
MB2-701 exams
070-411 exams
100-101 exams
640-554 exams
700-505 exams
70-457 exams
70-460 exams

Change of behaviour for version 3.6

The web service method GetAllDeliveryAddressesByDates in endpoint InfoWebXmlWebservices.asmx will change behavior:

The expected behavior (based on the input parameters) would be to retrieve all delivery addresses for the given subscription (CustomerNumber and Title) for the given date range.
However the actual behavior from at least v3.3 and onward to the latest version 3.5.1 is to retrieve all the customers addresses, regardless of title, in the given date range.

From version 3.6 the behavior will be changed so that it works as expected. For those of you relying on the current behavior we recommend switching to the GetAllDeliveryAddresses and filter the date range on the call site.

The change of behaviour will be noted in changelog number 11745

 

This notification is cross posted on our forums.

700-501 exam
70-480 braindump
C4040-108 Certification exam
MB2-701 braindump
070-411 PDF
100-101 exam
640-554 braindump
700-505 Certification exam
70-457 braindump
70-460 PDF
pass C2150-197 exam
free EX0-001 braindump
real 070-243 Certification exam
latest 70-466 braindump
best C_THR12_66 PDF
C4040-225 exam
1Z0-061 braindump
70-347 Certification exam
C4090-452 braindump
VCP-550 PDF
070-177 exam
070-412 braindump
70-417 Certification exam
70-463 braindump
70-488 PDF
C_HANATEC131 exam
pass C2090-303 braindump
free C2090-614 Certification exam
real 70-331 braindump
latest MB5-705 PDF
best 070-247 exam
070-347 braindump
070-463 Certification exam
300-206 braindump
70-243 PDF
74-325 exam
C2020-622 braindump
C2030-283 Certification exam
C2090-540 braindump
C2180-278 PDF
HP0-J73 exam
ICBB braindump
pass 070-246 Certification exam
free 070-341 braindump
real 070-417 PDF
latest 070-457 exam
best 070-458 braindump
1Z0-481 Certification exam
1Z0-599 braindump
300-207 PDF
70-246 exam
70-414 braindump
A00-240 Certification exam
C_TAW12_731 braindump
C4030-670 PDF
C4040-224 exam
C4090-450 braindump
C4120-783 Certification exam
EX200 braindump
MB2-700 PDF
MB3-700 exam
MB6-869 braindump
OG0-093 Certification exam
VCP-510 braindump
VCP550 PDF
070-178 exam
070-331 braindump
070-467 Certification exam
070-667 braindump
070-684 PDF
070-687 exam
1Z0-051 braindump
1Z0-060 Certification exam
1Z0-478 braindump
1Z0-485 PDF
1Z0-897 exam
200-120 braindump
220-801 Certification exam
500-201 braindump
70-346 PDF
70-412 exam
70-458 braindump
70-486 Certification exam
820-421 braindump
820-422 PDF
C2170-008 exam
C2180-275 braindump
C2180-276 Certification exam
C4040-123 braindump
JN0-343 PDF
M70-201
M70-301
NS0-504 exams
70-410 test
PW0-204 dumps
3001 exams
050-720 exam
070-480 exam
070-487 braindump
1Z0-062 Certification exam
1Z0-597 braindump
1Z0-899 PDF
250-310 exam
350-018 braindump
400-051 Certification exam
70-178 braindump
70-331 PDF
70-413 exam
70-465 braindump
70-467 Certification exam
70-484 braindump
70-485 PDF
74-338 exam
74-344 braindump
810-420 Certification exam
98-367 braindump
C_HANASUP_1 PDF
C_TSCM52_66 exam
C2010-571 braindump
C2040-988 Certification exam
C4040-226 braindump
C4120-782 PDF
CISSP exam
CPCM braindump
M70-101 Certification exam
MB6-700 braindump
MB7-701 PDF
VCAD510 exam
3605 braindump
7303 Certification exam
000-563 braindump
070-337 PDF
070-414 exam
070-459 braindump
070-460 Certification exam
070-466 braindump
070-483 PDF
070-685 exam
074-338 braindump
101-01 Certification exam
117-101 braindump
1Y0-370 PDF
1Z0-144 exams
1Z0-507 exams
1Z0-519 exams
1Z0-541 exams
200-101 exams
201-01 exams
299-01 exams
070-462
70-462
70-461
070-410
JN0-102
70-411
C_TADM51_731
C4090-958
70-483
EX300
070-461
MB2-702
C2020-622 exam dumps
C2030-283 exam dumps
C2090-540 exam dumps
C2180-278 braindumps
HP0-J73 braindumps
ICBB braindumps
070-246 braindumps
070-341 braindumps
070-417 braindumps
070-457 braindumps
070-458 braindumps
1Z0-481 braindumps

Discovering Running Version Using the Web Service API

Occasionally we have a request for retrieving version information via the Web services API. Typically for two reasons, one is to manually figure out which runtime version is deployed when trying to resolve issues, that is some human needs to verify that the webservice behind the URL matches the expected version.

The other reason is for a client to programmatically figure out which version of the API to use in different circumstances, typically needed for hosted services targeting multiple Infosystems installations or for larger installations where multiple environment within the organisation runs on different versions.

Till now there has been no real support for such version discovery, but starting with version 3.6 we are introducing a service to discover the version. The version service will be available both as a plain HTTP GET resource (giving you json or xml) and as a SOAP service.

The version service endpoint is currently includes 4 version markers:

  • Product Version – that is the “marketing” version number including the current bugfix relase number
  • Database Version – the schema/data model version, typically of the form 3.6 or 3.5 or something like that.
  • Build Version – the complete version including build number of the web service instance. This could possibly vary if you have multiple installations with different bugfix builds. API wise the build number should not be relevant.
  • Greatest Client Version – the greatest version of the windows forms application that has been logged. This is basically just included for “humans”. If this is a larger sub version than the product or build version something is probably wrong. I.e. if this shows 3.6.1.X and the build version shows 3.6.0.1.12345 then bugfix release is not applied on the web services installation.

We will post the details of the endpoint on the documentation site when nearing the 3.6 release.

Configuration changes and reducing startup time

As some of you might know the configuration system in InfoSystems suite is quite flexible, and by now it has a lot of configurations. A little over 1000 configuration options in total, some are more relevant than others by now. The system as it is currently, is basically an evolution of the system that existed in the old VB6 suite of application (now dubbed Classic) – meaning the design is roughly 20 years old!

Surprisingly it has held out quite nice, and while we have had our concerns with it, there has been no real need. Now however, due to performance issues we had to re-write the entire set of management forms. Instead of just fixing the form to perform better we had a look at the structure of the thing.

Title based configuration values

Most configurations are related to a title, so that title A can have one value and title B can have another in case they do things differently. That’s all fine and very nice, but the data model is such that each configuration must exist once per title. Now imagine you have 70 titles in the database, and each instance of configuration “C1″ should be the same but it should not be whatever default the system comes with: Then you have to go around and change 70 instances of “C1″, not exactly fun or time saving.

We are changing that, so now some of the configurations will allow you to set a default, with no title indication. Meaning that if a configuration “C1″ is not defined for a given title “A”, the default value will be used. There are still going to be a few configurations that will require you to set a title as there is no “sane” scenario where having a shared default makes sense (there are possibly scenarios where you would want to do it anyway, but we have to deal with your insanity :))

Configuration as a service

One other thing that rebuilding the configuration system has allowed us to do, is to expose the values as a service. It is not often needed, but on rare occasions a web client might need to know a specific configuration setting or limitation value from the system in order to provide the best end-user experience. Previously this was impossible without digging into the database, so most people resolved to hard-coding the values, other resolved to build it into their own configuration system. Either way there was a synchronization issue only resolvable by human interference.

With the re-write there is now a read only service that will give you any configuration that you need. We are still discussing the options for creating and maintaining your own configurations but as of yet we have had no demands for such an extensible configuration service so we are holding it back for when demand arrives.

Maintaining Configuration Data When Needed (Reducing startup)

Depending on the amount of data in the various configuration tables, the startup time of the application suite, be it client, webservice or the jobscheduler, takes from around 15 seconds up towards 40-45 seconds in the worst scenarios (largest installations). Part of this is due to the fact that during startup a maintenance routine runs to ensure consistency between the database, and the various defaults that should exist in the system.

In reality this maintenance is only required in two cases, the defaults changed (with a new version) or someone messed around with the database manually. The latter case is unsupported in any event, but the first is the whole reason for the maintenance routine.

We are introducing a change to this maintenance system so that it is only executed ONCE per new version. I.e. the first person starting any of the applications on a new version will get the long startup time, usually the person doing the upgrade, while all others will skip the maintenance routine altogether. This will reduce startup time with anything from 2 to 15 seconds depending on the database speed and number of records to analyze for maintenance. For those with either a lot of overrides or even a few titles (4+) this should be quite noticeable.

When?

So when will you be getting all this configuration goodness?
The short answer:  v3.6.0
The slightly longer answer: Bits and pieces of it has already found its way into 3.5.0 and a bit more into 3.5.1, but you probably won’t notice any of it. The things described above will be fully implemented in 3.6.0 to be released sometime during Q1 2016.

Configuration Form

Enough about the technicalities already, I want to see the damned result!

The new configuration form with "all" configuration values. The yellow cell indicates a user override is present for the current user.

The new configuration form with “all” configuration values.
The yellow cell indicates a user override is present for the current user.

 

An example of editing a given configuration. Very similar to the old one.

An example of editing a given configuration. Very similar to the old one.

 

 

Family or Shared Subscriptions

One of the fine features of a hardcopy (physical paper) is that it can be shared across the breakfeast table. Many of our customers have had an idea or a direct wish to support such a thing with the digital subscriptions they have. Previously we have only had support for this through a parameter “SharedSubscriptionCount” that could be defined on each subscription. This could then be used to minimize the number of accounts that could be connected to a subscription. All user mapping and handling had to be done on the outside.

We have now added the first steps to natively support subscriptions shared between multiple online users. There are now options to map users from an SSO/User system to a customer and one or more users to a subscription. Doing so exposes the needed functionality to allow a customer/subscriber to add users in his/hers household as users of the subscription. That information is then again available to the customer services. Depending on wether you use the Infosoft SSO backend or an external one, the feature set differs a bit, but by and large you should be able to get the same end result without having to maintain external user/customer mappings for shared subscriptions.

The use of this functionality requires some integration from the web client, and the endpoint required to do so are exposed as SubscriptionUser.svc. The technical documentation on how these services work can be found on the API Documentation site, and in the comming months we will be adding a guide/description of the various details the service exposes.

C-Web (the Infosoft self-service web client) already implements this feature, so some of you have had parts of this already for some time.

Note: SharedSubscriptionCount still need to be verified by the client if required and is not built into the SubscriptionUser service.

JobScheduler v1 and EmailListeners are being removed

Just a quick reminder/announcement – the old Job Scheduler Service and the Email Listener service are both going to be removed from the application suite starting with version 3.6 which is scheduled to appear in the fall of 2015.

As mentioned previously a new scheduler exists, and it is used in production multiple places and it is time to move on.

Likewise the services provided by the email listener, can now be achieved using the new scheduler so there is no need for a separate service to handle this load.

Hopefully this should alleviate some of the current installation pains.

Fixing stuff

As you might have noticed the last couple of posts have been related to stability issues, and small changes instead of huge new features. This one is no exception – this is going to be a post about what we are working on in the developer group.

With version 3.2 we added a so called “Customer Experience Improvement Program” (CEIP) – or in other words we now track errors as they happen and the details about them are submitted automatically to Infosoft. The information that is tracked is the same as you see in the error message box.

Based on this information we are now focusing our error fixing on the type of errors that occurs the most or affects the most users.

So what kinds of errors are being fixed? Thats a bit hard to answer but we’ll give you some examples.

For instance in the search view, if you entered a large number and searched for it, if you used the button for searching using customernumber you would get an informative error. If you searched using the “enter” button on your keyboard, a cryptic error would be displayed.

Another example is when something related to oracle started acting up, like a wrong username or a server timeout, you would get the oracle message and it was up to you to figure out what the error meant. Now we parse/interpret the most common Oracle errors and present an “understandable” error message (while maintaining the technical information if the DBA or another IT person have to find them).

Starting the application will also verify the globally configured report path to ensure its accessible from the machine running Infosystems, this reduces various report log errors related to procedures inside the application suite.

Likewise we discovered and fixed 3 memory leaks before they were reported by customers.

These are just some examples, we fixed more than 30 cases reported by the CEIP over the last year, and we will continue to do this moving forward and the CEIP also helps us with reported customer cases, where it sometimes can help us better understand the case from a technical standpoint.

Are we done?

Not by a long shot, we are not done untill we don’t have single reported “unexpected error” – we will likely never get there, but reducing those kinds of errors also reduces end user friction and irritation, and last but not least increases effeciency in fixing errors if the description is accurate and informative.