• Rahman khan12
  • NEWBIE
  • 0 Points
  • Member since 2019

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 2
    Replies
Hi,

The main question is: How do we add custom article fields to the article detail page of the mobile version of Public Knowledge Base 3?

We are setting up a Public Knowledge Base at a client, which is the official Public Knowledge Base 3 (PKB3) from the AppExchange. We have enabled the mobile setup for PKB as well, which is working fine, except that it doesn't show custom article fields.

We have created a few Article types (FAQ, Guideline, etc.), which all have the Rich Text field called 'Cotent' (content__c). We want to display this field on the article detail page of the mobile layout, so we go to PKB 2 Settings | PKB Knowledge Article Layouts | Add Knowledge Article. We then choose one of the knowledge articles (i.e. Guideline__kav) and see the possible fields to add to the layout. All of the fields look like system information (i.e. Id, IsDeleted, CreatedById, etc.), which are pretty useless to an external customer reading the article. See screenshot below.

We looked at the code which loads the available fields which is quoted below. We have tried running the code as an administrator to rule out field level security of the article, which revealed the same fields as explained above.

A Public Knowledge Base, with a build-in mobile site which can only display system information on mobile article detail page seems a bit weird, so we are hoping we missed something, and that it is in fact possible to display custom article fields on a the mobile layout?
public static Object getKnowledgeTypesAndFields(String d){
          pkb_SecurityHandler.canAccess( new Schema.SObjectType[] {KnowledgeArticleVersion.sObjectType} );

            map<String,Object> ret = new map<String,Object>();
            String thisType = '';
            Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
            Set<String> keySet = gd.keySet();
            Schema.DescribeSObjectResult descRes;
            Map<String, Schema.SObjectField> fieldMap;
            for (String key : keySet) {
                Schema.SObjectType objectType = gd.get(key);
                if (key.endsWith('ka') || key.endsWith('kb')) {
                    descRes = objectType.getDescribe();
                    thisType = descRes.getName().replace('ka','kav');
                    fieldMap = descRes.fields.getMap();
                    ret.put(thisType,fieldMap.keySet());
                }
            }
          return ret;
    }
PKB Mobile Knowledge Articles Layouts

Thank you
Kristian

When I am trying to launch an android hybrid app created using forcedroid it gives following error

 

12-06 05:57:48.176: D/HttpAccess:constructor(833): User-Agent string: SalesforceMobileSDK/2.1.0 android mobile/4.2.2 (sdk) moapp/1.0 Hybrid
12-06 05:57:48.876: I/SalesforceDroidGapActivity.onCreate(833): onCreate called
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): No user account found
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): com.salesforce.androidsdk.rest.ClientManager$AccountInfoNotFoundException: No user account found
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.salesforce.androidsdk.rest.ClientManager.peekRestClient(ClientManager.java:140)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.salesforce.androidsdk.ui.sfhybrid.SalesforceDroidGapActivity.onCreate(SalesforceDroidGapActivity.java:118)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.Activity.performCreate(Activity.java:5104)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.os.Looper.loop(Looper.java:137)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.main(ActivityThread.java:5041)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at java.lang.reflect.Method.invoke(Method.java:511)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at dalvik.system.NativeStart.main(Native Method)
12-06 05:57:49.146: D/dalvikvm(833): GC_CONCURRENT freed 279K, 13% free 2623K/3004K, paused 27ms+24ms, total 192ms
12-06 05:57:49.296: I/SalesforceDroidGapActivity.onResumeNotLoggedIn(833): Should authenticate / online - authenticating
12-06 05:57:49.296: I/SalesforceDroidGapActivity.authenticate(833): authenticate called
12-06 05:57:49.296: I/ClientManager:getRestClient(833): No account of type com.salesforce.androisdk found
12-06 05:57:49.936: D/gralloc_goldfish(833): Emulator without GPU emulation detected.
12-06 05:57:50.096: E/Trace(857): error opening trace file: No such file or directory (2)
12-06 05:57:51.318: D/HttpAccess:constructor(857): User-Agent string: SalesforceMobileSDK/2.1.0 android mobile/4.2.2 (sdk) mobilapp/1.0 Hybrid
12-06 05:58:09.306: D/LockChecker:run(833): isLocked:true elapsedSinceLastActivity:20 timeout:0

 Please help me to resolve this error

 

  • December 06, 2013
  • Like
  • 1