Articles

DrupalService as a bridge between flash and drupal

THIS POST IS OBSOLETE, the DrupalService has been replaced by the much more powerful DrupalProxy. You can read about it here: DrupalProxy as a bridge between flash as3 and drupal via amf.

Drupal is a multiple award winning opensource content management system. With the drupal services module, it’s possible to consume data from drupal in flash. Drupal is a very powerful tool to provide data to flash movies and with the community investing much time in drupal services, now is a great time to be using drupal to power your flash websites. Services will be part of the drupal 7 core release.

We decided to release our nl.dpdk.services.gephyr package, which is a drupal as3 service which acts as a bridge between drupal and flash and features all the power of our as3 flash remoting package. It has the core functionality of the drupal services built in and is very easy to extend and to adjust to your needs. Furthermore, it makes use of all drupals’ security mechanisms via key and session based authentication.
It has more features and packs more power than any other opensource actionscript 3 based drupal package out there at the moment, so be sure to check it out.

The architecture of the nl.dpdk.services.gephyr.DrupalService class is based upon using the RemotingProxy, which is an important part of communicating with an amf based backend. We use all of the aspects of our fully unittested RemotingProxy in nl.dpdk.services.remoting to provide access to drupal.

We have made the explicit choice to incorporate the core services functionality, which is based on nodes, users, taxonomy, system, search and views. By providing a strongly typed api, it’s very easy for the users to understand and use the DrupalService. The naming convention is to use serviceNameMethodName() as the methodnames on the class, so they are very easy to find and to use.

Furthermore, we make heavy use of the event driven paradigm of actionscript 3 by providing events for all drupal calls, including possible error related events for each specific server call via the DrupalEvent class. Thereby making it very easy to write robust code for your application.

Another aspect is that it’s very easy to use drupals’ security features. They are based on sessions and on using authentication keys. You can use either one of them, both, or none. DrupalService will handle it for you with the help of a DrupalSecurity object without extra trouble on your side. Just configure the DrupalService by providing the right data to the constructor.

The DrupalService itself is very flexible, we have made it closed for modification but open for extension, which means that it’s easy to provide your own logic by subclassing DrupalService. You can use the power of the DrupalService and build upon that. Suppose you need to write your own routines in drupal and create a custom service for it, then it has never been easier than with this class to build the functionality in flash.

By having a seperate DrupalSecurity object, we have encapsulated all stuff that is related to sessions and authentication keys in one object that can be used seperately of the DrupalService class, so if you wish to use your own drupal service, you can also take advantage of the fact that we have provided functionality for providing the authentication hashes, nonce etc. for you.
Special thanks to the guys from hurlant that provide a kickass cryptology library for encryption and hashing stuff. This is the first external library we have used for our opensource package. Be sure to check out their license conditions, it’s licensed under BSD and hurlant’s license text can be found here. Our nl.dpdk package is licensed under the MIT license.

There is a simple DrupalUtils class that will be filled with easy methods for setting up objects native to drupal. For instance, it is sometimes necessary to provide a timestamp to an object when you want to change it. The DrupalUtils class provides for such functionality, including getting a new user and node object, ready to be used or saved.

On top of that, we will take suggestions on adding more functionality in the DrupalService base class if the community needs it.

We’re working on getting in some more comments to make it easier for developers to see how to configure some objects native to drupal, but this is only a minor thing we will probably fix in the near future.

When using the DrupalService class, be sure to properly configure drupal permissions. You can use sessions, you can use keys, you can set permissions for different users or different user roles. Also don’t forget that it’s possible to log in, so you can have even better control over which user does what, just by having him log in to the drupal backend. The possibilities for configuration are endless and so are the things you can do with drupal and flash or flex.

A final thing to notice is that each DrupalEvent, dispatched by the DrupalService has either the error message generated by the backend or the intact structure of the returned data. Therefore, it’s very convenient for all users that are familiar with drupal to consume the data. Just get the data from the event and do with it what you want. We recommend converting it to your application’s relevant domain objects, preferrably via a factory of some kind.

let’s demonstrate how it all works with some code.

package nl.dpdk.services {
	import mx.utils.ObjectUtil;
	import nl.dpdk.services.gephyr.DrupalUtils;
	import nl.dpdk.services.gephyr.DrupalEvent;
	import nl.dpdk.services.gephyr.DrupalService;
 
	import flash.display.Sprite;
	[SWF(width="600", height="600", backgroundColor="0x2C3054", frameRate="31")]
	public class DrupalApplication extends Sprite {
                //the service
		private var service : DrupalService;
 
 
		public function DrupalApplication() {
                       //constructor, takes a gateway, whether we need sessions (optional), and a key and domain (optional)
			service = new DrupalService("http://drupal.dpdk.nl/services/amfphp", true, "8736e2c9e27b48a4a526ef922b4e9250" , "drupal.dpdk.nl");
 
                       //the generic error event
			service.addEventListener(DrupalEvent.ERROR, onError);
			//some other error events, mapped to the same handler for demo purposes
			service.addEventListener(DrupalEvent.ERROR_SYSTEM_CONNECT, onError);
			service.addEventListener(DrupalEvent.ERROR_NODE_GET, onError);
			service.addEventListener(DrupalEvent.ERROR_USER_LOGIN, onError);
                        //the event handlers for succesful calls
			service.addEventListener(DrupalEvent.SYSTEM_CONNECT, onConnect);
			service.addEventListener(DrupalEvent.USER_LOGIN, onUserLogin);
			service.addEventListener(DrupalEvent.NODE_GET, onNodeGet);
 
                       //since we use a session, connect to the system first, DrupalService will store the sessionId for you.
			service.systemConnect();
		}
 
               //the event handler for when the system connects
		private function onConnect(event : DrupalEvent) : void {
			trace("onConnect, sessionId: " + service.getSessionId());
 
                        //log in the drupal backend
			service.userLogin("MyUserName", "MyPassword");
		}
 
 
                //the event handler for when the user logs in
		private function onUserLogin(event : DrupalEvent) : void {
			trace("onUserLogin");
			trace(ObjectUtil.toString(event.getData()));
			//it's now possible to get the logged in user via service.getUser();
 
			//now get the first node, with only the selected fields nid, title and body_value
			service.nodeGet(1, new Array("nid", "title", "body_value"));			
		}
 
 
                //the event handler for when the data of a node has come in.	
		private function onNodeGet(event : DrupalEvent) : void {
			trace("onNodeGet");
			trace(ObjectUtil.toString(event.getData()));
                        //handle your data here....
		}
 
 
               //generic error event handler
		private function onError(event : DrupalEvent) : void {
			trace("onError: " + event.getError());
		}
	}
}

some other calls, so you get a feeling for the api

//gets the sessionId
service.getSessionId();
//gets the security object, which handles sessions and authentication
service.getSecurity();
//gets the currently logged in user objec
var user: Object = service.getUser();
//use the system to send a mail	
service.systemMail("mailkey", "you@example.com", "check out this drupal service", "hi there ,view it at dpdk.nl/opensource", "opensource@dpdk.nl");
//get all nodes in the "faq" view
service.viewsGet("faq");
//save a new node
service.nodeSave( DrupalUtils.createNode(DrupalUtils.TYPE_PAGE, "this is the title", "this is the body value"));
//change the currently logged in user's name
user.name = "Rolf Vreijdenberger";
service.userSave(user);
//gets the tree for a certain vocabulary
service.taxonomyGetTree(1);

We recommend checking out the drupal website and the very easy to follow book that just came out: Flash with Drupal by Travis Tidwell

Any feedback would be greatly appreciated. happy coding :)

40 Responses to “DrupalService as a bridge between flash and drupal”


  1. 1 Freddy

    great!… I’m looking for something similar… where’s the download?

  2. 2 Rolf Vreijdenberger

    Hi Freddy,

    there is no download. you can check it out via svn, see the source code page

    svn co http://playground.dpdk.nl/repos/dpdk_os_flash

  3. 3 Vinni

    Hey this is great!

    One question on the user login side of things, you mentioned you can get the currently logged in user by using service.getUser(); I can see this works well if you login through the flash. But is there a way of getting the flash to know whether you are logged in already (the browser session etc.).

    At the moment it seems if I browse to a page as a logged in user that has flash, I need to then login to the flash to use any user data.

    Hope this makes sense :)
    Cheers

  4. 4 rolf vreijdenberger

    hi vinnie,

    yes it does make sense. This is a use case that might come up a lot.

    The actual login itself is coupled to your php sessionid. So drupal will know that you’re logged in. If you can get the sessionid from the php page to your flash movie, you’re all done.
    This can be done via a couple of ways:
    - pass the session id via flashvariables, see a post on how to use flashvariables at http://www.dpdk.nl/opensource/using-a-flashvars-flash-parameters-registry-configure-your-flash-files-externally
    - pass the session id via javascript and flash’s ExternalInterface class.
    - make a call to a script on your site, that passes back the session id that your drupal site has already generated after your login.

    The sessionid itself can be passed to the DrupalService via DrupalService.setSessionId(id: String).

    If you can get the sessionid into the drupalservice, you should be good to go.
    And, alternatively, you can always just call systemConnect() and do a userLogin() from flash.

    If you want to have the logged in user’s data, you can also pass that in via javascript, as ExternalInterface supports the passing in of objects from javascript to flash and the other way around.

    We have adjusted the DrupalService in reaction to your comment to have an extra method: setUser(user: Object):void which sets a user object on the service that you would normally get via userLogin(). The user object can thus be passed via ExternalInterface to flash, which can pass it to the DrupalService.

    See comments on the methods setSessionId and setUser for further explanation.

  5. 5 Derek

    Where is the documentation? The bat file I tried to run created an error

  6. 6 Rolf Vreijdenberger

    hi Derek,
    the documentation is offline. We have the same problem building the documentation. asdoc doesn’t seem to like some formatting issues unfortunately. Since we can’t tell where the error is (it’s one of those “Error #1090: XML parser failure: element is malformed.” errors..) it’s just impossible for us to solve this at the moment.

    My suggestion would be to get a good flash editor (for windows, flashdevelop at http://www.flashdevelop.org) for both win and mac: eclipse + fdt, which lets you see all the documentation for function calls etc.
    An alternative would be to just scan the source code, from which any documentation is generated anyway.

  7. 7 Folkert

    Very nice DPDK what you did here. Will test the socks of this coming weeks.

  8. 8 Jay

    hi. thank you very much for your contribution to the drupal and flash communities with the release of this package. i’m used to developing drupal, but not flash or flex. i’d like to use your package for flex development. would it be possible to give an example of how to (assuming the reader knows nothing about flash).

    1. install your package into flex 3 builder (or eclipse)
    2. login/logout a user with drupal services (keys and sessions enabled)
    3. bind a flex data object through flex RemoteObject with dpdk package calls

    if you could show how your package would simplify the development of a flex application like http://drupal.org/node/118136 - that would really be helpful!

    cheers, jay

  9. 9 Rolf Vreijdenberger

    Hi Jay,

    you can use flash code from within flex just as in flash. While flex also uses mxml, you can use actionscript classes directly from there.
    The example above should work in flex also, with adjustments made for flex specific stuff. code wise, nothing should need to change.

    as for importing the package into flexbuilder, this would work as with any other external package, there should be lots of tutorials or explanations out there.

    the flex data binding is not used in the package, but I guess you could achieve the effect by using the results you get from your dataservice (DrupalService) and running them through a Factory you would make to get a flex RemoteObject you can use in your app.

  10. 10 Jay

    hi Rolf. i was reading through your code… very well commented (thank you) and at times amusing. i’m going to go ahead and test it, even though i got the example at http://electricpineapple.net/2009/03/10/api-keys-to-the-city-setting-up-a-flex-3-project-with-drupal-services to work, but with the video module. i noticed both gephyr and the pineapple example use different crypto packages; yours uses hurlant’s while pineapple uses adobe’s.

    i really appreciated your security/authentication comments in package nl.dpdk.services.gephyr - can you clearly identify the distinction in security between the uses of these 2 crypto packages - why would one be motivated to use gephyr’s calls to hurlant as opposed to pineapple’s calls to adobe?

    thank you - hope your weather is as nice there as it is here =)

  11. 11 rolf vreijdenberger

    Hi Jay,

    thanks :) I’m not sure what pineapple’s does, but as far as our package goes, it has some strong features:

    - you need not worry about the whole authentication key or session thing as it is encapsulated and abstracted away from the end user of the DrupalService. You only pass your stuff to the constructor of the DrupalService.
    - The DrupalSecurity object could be used standalone, but this is not necessary ever.
    - The whole gephyr drupal package is one big abstraction and totally reusable, if I have scanned the pineapple article correctly, it consists of somewhat non reusable code (not class/package based). So if you use our package and know how, you can always reuse it and extend it to your needs

    About the cryptographic packages, there is NO difference, that’s the beauty of encapsulation. It is about what the algorithm outputs not about how it works internally. We actually could have gone for the adobe package, but found hurlant’s to be easy as we have worked with it before. It was also error free in our editors (fdt + eclipse) which is always a good thing (as they give hints to possible flaws in your code). As for a distinction: I guess both do their thing, what remains is which one is faster, but this is not relevant as calls to the DrupalService will never be a bottleneck speedwise (they are asynchronous calls and a hash need only be generated when doing the call). I assume there will not be hundreds of calls to DrupalService per flash frame tick.

    that said, I will definitely check out adobe’s package, it might be easier to use/include in our package. Since it it abstracted away from the end user of DrupalService, whatever implementation we would choose, the end user will never notice :)
    The sun is always shining where we are ;)

  12. 12 Chris

    Seems like a good module, although because of the saveNode not having CCK field support it is a little limited i recommend changing the nodeSave function as follows:

    public static function createNode(type : String, title:String, body:String = “”, nid:int = 0, fields:Object = new Object()) : Object {
    /* New Code */
    for(var i:Number = 0; i < fields.length; i++)
    {
    switch(fields[i].type)
    {
    case ‘textfield’:
    // Easy to handle as it is just a string

    /* Example Formatting:
    character.field_region = Array();
    character.field_region[0] = Object();
    character.field_region[0].nid = 4;
    */
    node[String(fields[i].name)] = new Array();
    for(var j:Number = 0; j < fields[i].values.length; i++)
    {
    node[String(fields[i].name)][j].value = fields[i].values[j];

    }

    break;

    }

    }

    …/* Old Code */

    }

    // Side Notes:
    This is only an implementation for cck text fields, but the behavior could be reproduced for things like imagefields and filefields, etc. Using the Switch / Case conditional for this makes it a simple matter.

  13. 13 Ali

    I’m getting a view and i want to get the url’s of images which are included as fields in that view. Currently i’m just getting the fid and various other bits of data, how do configure DrupalService (or views) to do this. If i do a nodeGet i get all the image data (filepath etc) that i need. I want to avoid making multiple services calls to get all the node data and get it all in one view.

    Many thanks - and excellent framework btw

  14. 14 Rolf Vreijdenberger

    Hey Chris,

    could you elaborate a bit on that? You seem to mean DrupalUtils.createNode while you are talking about DrupalService.saveNode.

    If what you mean is that you want to store a node in a format that you created with the content creation kit (CCK), this would be possible, except that you would have to write your own method to create that node.

    The CCK allows you to specify loads of custom data structures for your data and for your specific application you can write a Factory that creates a valid drupal node from the data you have in your application. You can then send it to the backend via DrupalService.saveNode(yourNode) as usual.

    THe means to store custom nodes is therefore available, but you will still need to create your own node object. The DrupalUtils.createNode method is just provided as a conventient method to make a simple node for saving.

  15. 15 Rolf Vreijdenberger

    Hi Ali,

    we’ll look into that, as I don’t know the answer to that question. The DrupalService just returns what it gets from the Drupal backend, so any configuration should be done there. I know that the views service gives you back limited data and we are also interested in getting all the data you want at once, so we’ll give it another look.

    You could use the DrupalNodeTask in a Sequence to provide the functionality to load in lots of nodes sequentially. take a look in the nl.dpdk.services.gephyr.tasks package and see the comments in the DrupalNodeTask class.

  16. 16 Stephan de Bruin

    Hi Ali,

    If you want to get file url’s visible in views, you have to make some adjustments in your view. First of all you have to create a relationship to the file. If I’m correct the file is located in the content-group when you add a relationship, and has ‘fid’ as a suffix. If the option is available, set the delta to ‘all’ (this options is only available if you can add multiple files to a node).

    After you’ve created the relationship, you can add the field to the view. Just add a field as you would normally do, but under groups, select File:Path.
    After you´ve saved the view, you should be able to retrieve the url´s from the views-service.

  17. 17 Klikissy

    Hi,

    Thanks for this library, great job!!!

    I cant see nothing in it about how to get images with the “file.get” methode.

    Have you some examples?

  18. 18 Klikissy

    It’s me, again…
    I find the way to get images with the view methode.

    whatever, i ‘ve got an encoding probleme with my view. For exemple a string in my cck field text is transformed in flash : “titre é” –> “titre é”.

  19. 19 rolf

    hi, this is a problem with your data’s character encoding, not with the service :) take a look at utf-8 and unicode

  20. 20 tk

    Hi,
    first: thank you for this nice piece of work and especially for sharing it in opensource style!

    I’m currently playing around a little, but i ran into a problem /w systemConnect(), getting the following error:
    onError: Method system.connect does not exist.

    Do you have an idea?

    best, t.

  21. 21 rolf vreijdenberger

    Hi Tk,

    well, the error method is pretty clear “system.connect” does not exist :) Did you check your services module in drupal to see if it is actually there? and did you test it?
    what version are you using of drupalservices?

  22. 22 Dr00py

    Hi Rolf, thanks for the nice share.
    I am facing a problem trying to use your lib.

    The commands

    service = new DrupalService("http://localhost/yeskid/services/amfphp", true, "9774595cd242c2c1eda52172a4e7d5ee" , "http://localhost/yeskid");
    service.systemConnect();

    doesn’t trigger any callbacks and just traces
    Error opening URL ‘http://localhost/yeskid/services/amfphp’

    In ServiceCapture I can see that there is BOM \xEF\xBB\BF in front of the response which probably makes it to fail.

    This is what actually led me to abandon trying to write my own remote classes and resort to ready made lib. I have written about it here http://drupal.org/node/620012.

    Now the problem appears again. Can you imagine what can it be?

    Thanks in advance.

  23. 23 tk

    I see :) I had to enable the System Service - Module and now its fine.

    Thank you!
    tk

  24. 24 Rolf Vreijdenberger

    Hi Droopy,

    I’m not sure about how to solve it. Since the problem is on the amfphp server side of things, is it possible to get any help from the amfphp community or forums? (actually, I now see you already did this)

    is it a problem on your local machine, or also on a remote machine?

  25. 25 Robin van Emden

    Hi,
    First of all thank you for your great open source DrupalService! I am using it in a project of mine and wondered of you’d be able to offer any insight in sharing the service between classes. I could make the service a static var, but that doesn’t seem very neat. Another option might be to share the user and the session. But in this case, wouldn’t I have to set the sessionId using setSessionId to the user-sessionId, instead of the login-session always retrieved when calling service.getSessionId(), in order to get correct permissions?

  26. 26 rolf vreijdenberger

    Hi Robin,

    talking about sharing the drupalservice between classes will quickly get us into talking about the architecture of your application.

    Using a static var for the service is essentially creating a globally accessible service, which (in 2009) is generally considered by many to be a bad implementation (google on globals, singletons etc). However, for rapid application development, where you are the only one writing code, this might be a good choice.

    In my view, an application should probably be built by feeding the right classes with the right data or objects. Some design patterns that come to mind are the Facade pattern in combination with dependency injection.

    I would normally use a dataservice, which for me is a generalization of many remote services I would use. For instance, a dataservice which encapsulates a drupalservice and a flash remoting service to provide me with data and multiuser interaction. This allows my application to talk to a placeholder for a remote service implementation without the application knowing this. This allows easy testing and a good architectural setup.

    The class that talks to the dataservice is then probably responsible for feeding the right other objects in the application with data from the dataservice. The other objects can either send out events that they require data or want to do something (probably to a controller like in Model View Controller) and will have an api that lets clients of that object insert data into it. In this way, bidirectional communication is possible.

    Another option is to inject the dataservice into all objects that need it. Problem is that this will introduce tighter coupling between objects, since more objects know about the dataservice and use it’s api, and will make central coordination much harder, because all objects can request data and manipulate the dataservice (this makes error handling more difficult for example. where do you handle this, application scope or local scope?).

    The option you suggest is a variation on the last example. instead of sharing the dataservice you pass around the sessionid’s and recreate a drupalservice where you need it. In that case, I would rather pass around the service itself.

    I have a clear preference, but it is also a matter of style, taste and your needs at the moment.

    Your last sentence/question implies that something in the drupalservice is not correct. I am not sure what you mean by it, could you please expand a littlebit on that? Since I’m actually not sure if this might be a bug, it could be we did not implement this correctly, I always assumed the login-session was used. I’d love to hear more about this.

  27. 27 Rolf Vreijdenberger

    Hey Robin,

    When screening the code I actually saw a TODO item stating exactly what you said (in loginUser() and the event handler inside DrupalService). It actually is the source for a bug we found earlier but never took time to handle: when logging out, we got an ‘user not logged in error’.

    This is due to the fact that when you do a system.connect first, you get a sessionId, but this is overwritten when you login. The new sessionId should then be used in new calls to the drupal backend. Inside the drupalservice this was not yet handled. We just fixed this and uploaded a newer version. In this way, there will be no more errors and access to the services will work as they should.

    To elaborate: when you logout again, the sessionId does not change. when you do another system.connect it stays the same. When you login again, it changes again.

    In other words, when connecting for the first time or when doing a login, the sessionId is set/changes.
    We have incorporated the changes, thanks for noticing and letting us know ;)
    The stuff in the previous comment still hold of course!

  28. 28 Robin van Emden

    Hey Rolf,
    Thank you, both for your extensive & truthful answer on architecture, and for the bugfix in DrupalService! Have checked out the latest version & followed your advice on using a DataService. My app and DrupalService are now best of friends :)

  29. 29 Robin van Emden

    Hi Rolf,
    I am trying to save to a cck text field, but to no avail:

    var node : Object = new Object();
    node.type = ‘exp_user_session’;
    node.title = ‘c35345′;
    node.field_flash_info=new Array({value:”test”});

    Am using the latest services 6.x-2.x-dev 2009-Nov-28 and amfphp 6.x-1.0-beta1 versions.
    I do receive a “mysqli_real_escape_string() expects parameter 2 to be string, array given” AMFPHP_RUNTIME_ERROR …

    Is this something you have encountered yourself? Might it have something to do with the latest Services dev?

  30. 30 Robin van Emden

    Regarding last question: never mind, this is indeed a services dev bug!

  31. 31 Chris Huston

    Rolf,

    I love all of it more than chocolate. Great job, your work is inspiring.

    One thing I found that helped me a tad was to add:

    setUser(data.getResult().user); // on line 277 or so

    Just to set the user object if we are already logged in before connecting.

    Then you can check against system.getUser().userid == “0″

    Thanks and keep kicking all kinds of ass.

  32. 32 Robin van Emden

    Hi Rolf,
    Added Chris’ line of code to my codebase, as it does come quite in the aforementioned ‘logged in before connecting’ scenario. Might there be a chance this will be added to the DPDK repo?
    Coding happily along making good use of your framework :D Robin

  33. 33 Rolf Vreijdenberger

    Hi Chris and Robin,
    we’ll take a look at it soon. thanks for letting us know. We’re also in the process of staying on top of the changes that will be made to the services in drupal and future drupal versions. So we’re figuring out where to go from here…
    I’ll keep you updated.
    Have a good 2010!

    @chris: we’ll probably make a method on the service ala isLoggedin() to encapsulate the getUser().userid == “0″ thinggie.

  34. 34 mat

    Hi Rolf,

    I’m refreshing this comments list in order to congratulate you and your crew about this wonderful AS3 class. You made a great work there & I hope you will continue to work this kind of code for the community needs ; It’s the way of openSource and It’s the way of common sense.

    Sorry for my rusted english, i’m french and everyone knows our english level! :o
    Best regards

  35. 35 Lars

    Hi Rolf,

    Nice work!

    The character encoding problem that Klikissy had is in the AMFPHP module..
    http://blog.richardolsson.se/blog/2008/12/character-encoding-bug-in-amfphp-for-drupal

    //L

  36. 36 Derek

    I am having a problem with your search on nodes. Here is how I am calling it from flash…

    _drupal_service.addEventListener(DrupalEvent.ERROR_SEARCH_NODES,onSearchNodesError);
    _drupal_service.addEventListener(DrupalEvent.SEARCH_NODES,onSearchNodes);

    public function SearchTerm(search:String) {
    // do drupal search
    trace(”I am searching for “+search);
    _drupal_service.searchNodes(”golf”);
    }

    I get the following error…

    [1060] (debug) RemotingProxy for service: search onStatus() was called for a call to ’save’ but no handler was created.

    You service code: Is this where save is failing?

    public function searchNodes(keys : String, simple : String = “”) : void {
    //does not use authentication keys
    if(security.useSession()) {
    searchService.save(getSessionId(), keys, simple);
    } else {
    searchService.save(keys, simple);
    }
    }

  37. 37 titouille

    Hi Rolf,

    Is there any reason to not implement System.getVariable( … ) method in your package ? security, no need for you ?

    Thanks for this great package ;-)

  38. 38 Dex

    Hey dpdk!

    I just downloaded you os package and added it to my project but I am getting a whole list of errors! Methods missing or methods that weren’t properly refactored.. whats up with that?
    Other than that keep up the good work!

  39. 39 gadzet

    I am extremely impressed with your writing skills as well as with the layout on your weblog. Is this a paid theme or did you modify it yourself? Either way keep up the excellent quality writing, it’s rare to see a great blog like this one nowadays..

  40. 40 block

    program and hence it is important to examine with the top quality of company provided by

  1. 1 running tasks in order with a task based sequence manager at dpdk Open Source
  2. 2 DrupalService makes it easy to use Drupal as a data source for a Flash site « Ramblings
  3. 3 DrupalProxy as a bridge between flash as3 and drupal via amf at dpdk Open Source
  4. 4 On using sequences and tasks with the DrupalService at dpdk Open Source

Leave a Reply