Redesigning the Collections Framework

Hi!
I'm sort of an experienced Java programmer, in the sense that I program regularly in Java. However, I am not experienced enough to understand the small design specifics of the Collections Framework (or other parts of Javas standard library).
There's been a number of minor things that bugged me about the framework, and all these minor things added up to a big annoyance, after which I've decided to (try to) design and implement my own framework.
The thing is however, that since I don't understand many design specifics about the Collection Framework and the individual collection implementations, I risk coming up short with my own.
(And if you are still reading this, then I thank you for your time, because already now I know that this entry is going to be long. : ) )
Since I'm doing my Collection framework nearly from scratch, I don't have to worry too much about the issue of backwards compatibility (altough I should consider making some parts similar to the collection framework as it is today, and provide a wrapper that implements the original collection interfaces).
I also have certain options of optimizing several of the collections, but then again, there may be very specific design issues concerning performance and usability that the developers of the framework (or other more experienced Java progammers) knew about, that I don't know.
So I'm going to share all of my thoughts here. I hope this will start an interesting discussion : )
(I'm also not going to make a fuss about the source code of my progress. I will happily share it with anyone who is interested. It is probably even neccessary in order for others to understand how I've intended to solve my annoyances (or understand what these annoyances were in the first place). ).
(I've read the "Java Collections API Design FAQ", btw).
Below, I'm going to go through all of the things that I've thought about, and what I've decided to do.
1.
The Collections class is a class that consists only of static utility methods.
Several of them return wrapper classes. However the majority of them work on collections implementing the List interface.
So why weren't they built into the List interface (same goes for methods working only with the Collection interface only, etc)? Several of them can even be implemented more efficiently. For example calling rotate for a LinkedList.
If the LinkedList is circular, using a sentry node connecting the head and tail, rotate is done simply by relocating the sentry node (rotating with one element would require one single operation). The Collections class makes several calls to the reverse method instead (because it lacks access to the internal workings of a LinkedList).
If it were done this way, the Collections class would be much smaller, and contain mostly methods that return wrapped classes.
After thinking about it a while, I think I can answer this question myself. The List interface would become rather bloated, and would force an implementation of methods that the user may not need.
At any rate, I intend to try to do some sort of clean-up. Exactly how, is something I'm still thinking about. Maybe two versions of List interfaces (one "light", and the other advanced), or maybe making the internal fields package private and generally more accessible to other package members, so that methods in other classes can do some optimizations with the additional information.
2.
At one point, I realized that the PriorityQueue didn't support increase\decrease key operations. Of course, elements would need to know where in the backing data structure it was located, and this is implementation specific. However, I was rather dissapointed that this wasn't supported somehow, so i figured out a way to support this anyway, and implemented it.
Basically, I've wrapped the elements in a class that contains this info, and if the element would want to increase its key, it would call a method on the wrapping class it was contained in. It worked fine.
It may cause some overhead, but at least I don't have to re-implement such a datastructure and fiddle around so much with the element-classes just because I want to try something with a PriorityQueue.
I can do the same thing to implement a reusable BinomialHeap, FibonacciHeap, and other datastructures, that usually require that the elements contain some implementation-specific fields and methods.
And this would all become part of the framework.
3.
This one is difficult ot explain.
It basically revolves around the first question in the "Java Collections API Design FAQ".
It has always bothered me that the Collection interface contained methods, that "maybe" would be implemented.
To me it didn't make sense. The Collection should only contain methods that are general for all Collections, such as the contains method. All methods that request, and manipulate the Collection, belonged in other interfaces.
However, I also realized that the whole smart thing about the current Collection interface, is that you can transfer elements from one Collection to another, without needing to know what type of Collection you were transferring from\to.
But I still felt it violated "something" out there, even if it was in the name of convenience. If this convenience was to be provided, it should be done by making a separate wrapper interface with the purpose of grouping the various Collection types together.
If you don't know what I'm trying to say then you might have to see the interfaces I've made.
And while I as at it, I also fiddled with the various method names.
For example, add( int index, E element), I felt it should be insert( int index, E element). This type of minor things caused a lot of confusion for me back then, so I cared enough about this to change it to somthing I thought more appropriate. But I have no idea how appropriate my approach may seem to others. : )
4.
I see an iterator as something that iterates through a collection, and nothing else.
Therefor, it bothered me that the Iterator interface had an optional remove method.
I myself have never needed it, so maybe I just don't know how to appreciate it. How much is it used? If its heavily used, I guess I'm going to have to include it somehow.
5.
A LinkedList doesnt' support random access. But true random access is when you access randomly relative to the first index.
Iterating from the first to the last with a for statement isn't really random access, but it still causes bad performance in the current LinkedList implementation. One would have to use the ListIterator to achieve this.
But even here, if you want a ListIterator that starts in the middle of the list, you still need to traverse the list to reach that point.
So I've come up with LinkedList that remembers the last accessed element using the basic methods get, set, remove etc, and can use it to access elements relatively from it.
Basically, there is now an special interal "ListIterator" that is used to access elements when the basic methods are used. This gives way for several improvements (although that may depend how you look at it).
It introduces some overhead in the form of if-else statemenets, but otherwise, I'm hoping that it will generally outperform the current LinkedList class (when using lists with a large nr of elements).
6.
I've also played around with the ArrayList class.
I've implemented it in a way, that is something like a random-access Deque. This has made it possible to improvement certain methods, like inserting an element\Collection at some index.
Instead of always shifting subsequent element to the right, elements can be shifted left as well. That means that inserting at index 0 only requires a single operation, instead of k * the length of the list.
Again, this intrduces some overhead with if-else statements, but is still better in many cases (again, the List must be large for this to pay off).
7.
I'm also trying to do a hybrid between an ArrayList and a Linked list, hopefully allowing mostly constant insertion, but constant true random access as well. It requires more than twice the memory, since it is backed by both an ArrayList and a LinkedList.
The overhead introduced , and the fact that worst case random access is no better than that of a pure LinkedList (which occurs when elelements are inserted at the same index many times, and you then try to access these elements), may make this class infeasible.
It was mostly the first three points that pushed my over the edge, and made me throw myself at this project.
You're free to comment as much as you like.
If no real discussion starts, thats ok.
Its not like I'm not having fun with this thing on my own : )
I've started from scratch several times because of design problems discovered too late, so if you request to see some of the source code, it is still in the works and I would have to scurry off and add a lot of java-comments as well, to explain code.
Great. Thanks!

This sort of reply has great value : )
Some of them show me that I need to take some other things into consideration. Some of them however, aren't resolved yet, some because I'm probably misunderstanding some of your arguments.
Here goes:
1.
a)
Are you saying that they're were made static, and therefor were implemented in a utility class? Isn't it the other way around? Suppose that I did put them into the List interface, that would mean they don't need to be static anymore, right?
b)
A bloated List interface is a problem. Many of them will however have a default not-so-alwyas-efficient implementation in a abstract base class.
Many of the list-algorithms dump sequential lists in an array, execute the algorithm, and dump the finished list back into a sequential list.
I believe that there are several of them where one of the "dumps" can be avoided.
And even if other algorithms would effectively just be moved around, it wouldn't neccesarily be in the name of performance (some of them cannot really be done better), but in the name of consistency\convenience.
Regarding convenience, I'm getting the message that some may think it more convenient to have these "extra" methods grouped in a utility class. That can be arranged.
But when it comes to consistency with method names (which conacerns usability as well), I felt it is something else entirely.
For example take the two methods fill and replaceAll in the Collections class. They both set specific elements (or all of them) to some value. So they're both related to the set method, but use method names that are very distinguished. For me it make sense to have a method called setAll(...), and overload it. And since the List interface has a set method, I would very much like to group all these related methods together.
Can you follow my idea?
And well, the Collections class would become smaller. If you ask me, it's rather bloated right now, and supports a huge mixed bag of related and unrelated utitlity methods. If we should take this to the extreme, then The Collections class and the Arrays class should be merged.
No, right? That would be hell : )
2,
At a first glance, your route might do the trick. But there's several things here that aren't right
a)
In order to delete an object, you need to know where it is. The only remove method supported by PriorityQueue actually does a linear search. Increase and decrease operations are supposed to be log(n). Doing a linear search would ruin that.
You need a method something like removeAt( int i), where i would be the index in the backing array (assuming you're using an array). The elemeny itself would need to know that int, meaning that it needs an internal int field, even though this field only is required due to the internal workings of PriorityQueue. Every time you want to insert some element, you need to add a field, that really has nothing to with that element from an object-oriented view.
b)
Even if you had such a remove method, using it to increase\decrease key would use up to twice the operations neccesary.
Increasing a key, for example, only requires you to float the element up the heap. You don't need to remove it first, which would require an additional log(n) operations.
3.
I've read the link before, and I agree with them. But I feel that there are other ways to avoid an insane nr of interfaces. I also think I know why I arrive at other design choices.
The Collection interface as it is now, is smart because it can covers a wide range of collection types with add and remove methods. This is useful because you can exchange elements between collections without knowing the type of the collection.
The drawback is of course that not all collection are, e.g modifiable.
What I think the problem is, is that the Collection interface is trying to be two things at once.
On one side, it wants to be the base interface. But on the other side, it wants to cast a wide net over all the collection types.
So what I've done is make a Collection interface that is infact a true base interface, only supporting methods that all collection types have in common.
Then I have a separate interface that tries to support methods for exchanging elements between collections of unknown type.
There isn't neccesarily any performance benefit (actually, it may even introduces some overhead), but in certainly is easier to grasp, for me at least, since it is more logically grouped.
I know, that I'm basically challenging the design choices of Java programmers that have much more experience than me. Hell, they probably already even have considered and rejected what I'm considering now. In that case, I defend myself by mentioning that it isn't described as a possiblity in the FAQ : )
4.
This point is actually related to point 3., becausue if I want the Collection interface to only support common methods, then I can't have an Iterator with a remove method.
But okay....I need to support it somehow. No way around it .
5. 6. & 7.
The message I'm getting here, is that if I implement these changes to LinkedList and ArrayList, then they aren't really LinkedList and ArrayList anymore.
And finally, why do that, when I'm going to do a class that (hopefully) can simulate both anyway?
I hadn't thought of the names as being the problem.
My line of thought was, that okay, you have this arraylist that performs lousy insertion and removal, and so you avoid it.
But occasionally, you need it (don't ask me how often this type of situation arises. Rarely?), and so you would appreciate it if performed "ok". It would still be linear, but would often perform much better (in extreme cases it would be in constant time).
But these improvements would almost certainly change the way one would use LinkedList and ArrayList, and I guess that requires different names for them.
Great input. That I wouldn't have thought of. Thanks.
There is however some comments I should comment:
"And what happens if something is suibsequently inserted or removed between that element and the one you want?"
Then it would perform just like one would expect from a LinkedList. However if that index were closer to the last indexed position, it would be faster. As it is now, LinkedList only chooses either the first index or the last to start the traversal from.
If you're working with a small number of elements, then this is definitely not worth it.
"It sounds to me like this (the hybrid list) is what you really want and indeed all you really need."
You may be right. I felt that since the hybrid list would use twice as much memory, it would not always be the best choice.
I going to think about that one. Thanks.

Similar Messages

  • The Collections Framework

    When I first learned the java Collectins framework, I was struck by its elegance.I was also impressed by the Sun advice: use thisframework, not the older one.
    Sun has now gone on to extend the framework by making it desirable to add object descriptions.This ,to me is increasing the amount of stuff I have to learn without helping me in any great way ( A programmer should know what object he is putting in a Collection).
    I had hoped that Sun would add the beautiful "store' and "load" methods of the Properties class into its HashSet (although Properties now extends HashSet it's not quite the same thing).
    More importantly, once you start coding on the Server side, you can't get away from enumerations which I thought would be obsolete by now,given the advantage of iterators.
    Any comments?

    When I first learned the java Collectins framework, I
    was struck by its elegance.I was also impressed by
    the Sun advice: use thisframework, not the
    older one.
    Sun has now gone on to extend the framework by making
    it desirable to add object descriptions.This
    ,to me is increasing the amount of stuff I have to
    learn without helping me in any great way ( A
    programmer should know what object he is putting in a
    Collection).What are you talking about? Generics? You don't have to use them, and if you do, sometimes it's nice to be able to get rid of all the casting.
    I had hoped that Sun would add the beautiful "store'
    and "load" methods of the Properties class into its
    HashSet (although Properties now extends HashSet it's
    not quite the same thing).What for? HashMaps are basically serializable, but you cannot guarantee them to contain non-serializable data. So any attempt to store them could fail. Properties OTOH only contain Strings.
    More importantly, once you start coding on the Server
    side, you can't get away from enumerations which I
    thought would be obsolete by now,given the advantage
    of iterators.
    Any comments?They are obsolete. Read the Enumeration API - use of Iterator is encouraged.

  • Use of transient fields in Collections Framework?

    Hi all,
    I've been playing around with the reflection API for introspecting various members of the Collection Framework (CF).
    It turns out that many of the fields used by the members of the CF use the transient fields for their data-storage. For example: ArrayLists stored their elements in a transient field named elementData.
    Following the Java Language Specification, the transient fields are therefore not part of the object's persistent state. As a consequence, it is "not" possible to make such an object persistent (although, from what I understood, you could serialize such an object including its element data).
    Is there any particular reason why those fields are defined as transient?

    Hi all,
    I've been playing around with the reflection API for
    introspecting various members of the Collection
    Framework (CF).
    It turns out that many of the fields used by the
    members of the CF use the transient fields for
    their data-storage. For example: ArrayLists stored
    their elements in a transient field named
    elementData.
    Following the Java Language Specification, the
    transient fields are therefore not part of the
    object's persistent state. As a consequence, it is
    "not" possible to make such an object persistent
    (although, from what I understood, you could serialize
    such an object including its element data).
    Is there any particular reason why those fields are
    defined as transient?You need to distinguish between the data logically contained by a Collections object (or indeed any other), and how that data is represented both in memory, and in the persisted form. A class marks a field transient simply to inform the default serialization mechanism that the field does not form part of the persistent representation. Typically this is either because it is only used for cacheing purposes, or because the class itself takes responsibility for the persisted form.
    The Collections classes often have a complexity in their memory representation that is related to their performance requirements, but which serves no purpose in their persisted form. Consider a TreeMap, for example. Its memory representation involves a tree, but the only things that need to be persisted are the key/value pairs. Persisting the tree would be wasteful in both time and peristent storage.
    Sylvia.

  • Why hashMap is not the part of collection framework

    why hashMap is not the part of collection framework ??
    why Map start its own new hierarchy??
    thanks

    A Map is not simply a collection of stuff, it is a mapping from stuff to stuff.
    It doesn't make any sense to "add stuff to a map", unless you tell it both a key and a value.
    It doesn't make any sense to ask "does this contain stuff", unless you tell it to look in its keys or in its values.
    Those (and similar) reason explain why a Map is not a Collection.
    Note that there are views of the keys and the values that do behave like Collections (for example you can take the keys() view of the Map and tell it to remove stuff from it and it will do what you'd expect). But the Map as a whole is not a Collection of stuff. It is a mapping of stuff.
    (I hereby declare "stuff" to be a technical term).

  • Item SI_SHOWDESCONLY was not found in the collection

    To give a bit of an overview of the software I'm talking about, we have web applications that integrate crystal reporting (either BOE XI R2 or BOE XI R3.1 depending on the site). The relevant function that these sites perform is to allow the user to schedule a report which invokes the functionality through crystal to create a report scheduled to run at a specified time(s). These entries exist in the History tab of a particular report when viewed in the Central Management Console. This web application references a reporting library (DLL) that contains all the references (11.5.3300.0) to the various CrystalDecisions DLLs used to perform these functions
    We have a 2nd piece of software that runs a windows service on an application server which references the same reporting library as the web service. This service essentially cross references entries in our own database with the entries in the crystal database to see if they have processed, or reports back errors, it will "reschedule" a report if it has been deleted.
    The issue we are having is that the windows service fails with "Item SI_SHOWDESCONLY was not found in the collection" when calling the following lines of code:
    Dim ceScheduleDoc As CrystalDecisions.Enterprise.Desktop.Report
                    Dim ceSchedulingInfo As SchedulingInfo
                    Dim ceDestinationObjects As InfoObjects
                    Dim ceDestinationObject As InfoObject
                    Dim ceDestination As Destination                   
                  ceSchedulingInfo.BeginDate = dtTempDate
                        ceScheduleDoc.SchedulingInfo.RightNow = False
                        ceScheduleDoc.SchedulingInfo.Type = CeScheduleType.ceScheduleTypeOnce
                        ceDestinationObjects = ceInfoStore.Query("Select * from CI_SYSTEMOBJECTS Where SI_NAME = 'CrystalEnterprise.DiskUnmanaged'")
                        ceDestinationObject = ceDestinationObjects.Item(1)
                        Dim ceDisk As New DestinationPlugin(ceDestinationObject.PluginInterface)
    (if you need to see more of the code that happens in this method, let me know, but it's that sequence that blows up (this forum limits the amount of lines in a post, which is why i'm trying to limit what I display)
    I have a theory that the issue is that perhaps the service is trying to invoke a different version of the crystalDecisions.Enterprise.InfoStore reference, despite the fact that the project reference explicitly tells it to use 11.5.3300.0, our GAC does also include 12.0.1100.0 and 12.0.2000.0 and on some servers 10.5.3700.0.
    Is there perhaps a binding redirect occuring somewhere that I can find?? I've checked app.config and machine.config

    I will run modules utility
    but I should mention that the exact same code is run everyday by the web application to schedule reports, and calls those very same lines without issue, it's just when called from the service (on a different server) that it blows up, which is why I'm led to believe that it's an issue with the version of the DLL that it's trying to call
    i know in the web.config for the web app, you can explicitly specify that the DLL use certain versions of dlls with tags as follows:
    <system.web>
    <compilation defaultLanguage="c#" debug="true"><assemblies><add assembly="CrystalDecisions.CrystalReports.Engine, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.ReportSource, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.Shared, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.Web, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.Enterprise.Framework, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.Enterprise.InfoStore, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/><add assembly="CrystalDecisions.Enterprise.Web, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/></assemblies></compilation>
    </system.web>
    whereas the app.config for my service doesn't quite have that ability...unless it does and I don't know about it??

  • SAP data collection framework - owner change

    Hi,
    in the data collection framework there is an owner assigned to all data collectors. In general the owner is the SID system itself.
    If another system (i.e. solman) is connected to the system, the owner of the data collector changes to that system.
    The data collection does not work any longer and creates a lot of errors.
    I can change back the owner, but it changes immediately to the connected system.
    Why does the data collector not work with the "foreign" owner? And why does the owner change at all?
    Best regards
    Arne

    Dear Mr. Knoeller,
    Your SAP_BASIS SP and release would be helpful, both for SolMan and the managed system.
    Until then, could you please check the following notes and KBAs, in this order:
    1927012 - SYB: DBACockpit shows warnings about data collectors not
    being properly set up or having a different version
    1972114 - SYB: Error in DCF ownership transfer - should solve your issue in my opinion
    1712802 - SYB: Change ownership of Data Collection Framework /
    ATM
    1623182 - SYB: Authorization issues in DBACockpit
    In case this is a test system, if the mentioned notes do not offer you a propper resolution, I would also drop all the collectors (Framework Collecter would be the last one, of course) and reassign it to Solution Manager. This also depends on your NW release, SP and DBA Cockpit rellease.
    Relevant notes regarding DBA Cockpit version known by me:
    1757928 - SYB: DBA Cockpit Release Notes 7.02 SP11, 7.30 SP6, 7.31
    SP2
    1758182 - SYB: DBA Cockpit Release Notes 7.02 SP12, 7.30 SP8, 7.31
    SP5
    1758496 - SYB: DBA Cockpit Release Notes 7.02 SP13, 7.30 SP9, 7.31
    SP7
    1814258 - SYB: DBA Cockpit Release Notes 7.02 SP14, 7.30 SP10, 7.31
    SP9, 7.40 SP4
    Kind Regards,
    Ionut

  • Modify the default framework page

    Hi all,
    I need to create a new portal framework page. This needs to differ from the Default framework page only in the KM navigation links. I have a different KM folder to point to in the new framework page.
    I tried creating a separate page with my KM navigation iview and adding it to the desktop inner page. But this didnt help, because i now have the new KM links, that I added to the navigation panel of the desktop inner page + the old links in the content area( that is what I think) .Anyway both the KM links are now visible side-by-side.
    Can someone tell me how to modify only the KM navigation links in the default framework page?
    -Ashwini.

    Hi Ashwini,
    So as per your reply I guess you already have an iView ready which you want to place on the navigation panel.
    Ok, it goes like this:
    1. Copy the Default Framework Page from Portal Users -> Standard Portal Users into your own development folder.
    2. Open the copied page for editing. Select Desktop Inner Page. And click on Open. In the Page Content you'll find an iView for Dynamic Navigation. Uncheck the visible check box next to it.
    3. Add your own developed iView to this Page. You can do this by right-clicking on your iview and then say "Add iview to Page Delta Link". Make this newly added iView Visible and fixed.
    4. To make sure it appears correctly, click on the Page Layout radio button and see that the iviews are arranged correctly. If required you can drag and place them wherever you wish.
    5. Now, you need to make a desktop which consists of a Framework + theme. To do this go to System Admin -> Portal Display.
    While your desktop is in edit mode. Right Click on your framework which you edited and Say "Add framework to Desktop". Down below you will find a themes folder. Add any theme in the same fashion to your desktop.
    Next go to Portal Administrators -> Super Administrators -> Master Rule collection.
    Here you have to put you rule. Its self explanotory.
    But make sure you do this correctly.
    That does it.
    Please let me know if I answered your question.

  • Why new collection framework

    can somebody tell me Why sun people has created new collection framework and restructured all the classes and interfaces?

    Please refer to:
    http://java.sun.com/j2se/1.4.2/docs/guide/collections/overview.html
    http://java.sun.com/docs/books/tutorial/collections/index.html

  • References are becoming invalid when passed to an actor using the Actor Framework

    I have having an issue with passing a couple of references to an actor using the actor framework 3.0.7 (LabVIEW 2011 & TestStand 2010 SP1). 
    Some background:
    My application has three main components:
    Main VI -- is not part of any class and Launches UI Actor.
    UI Actor -- Launches the teststand actor
    TestStand Actor -- Initializes and starts teststand.
    The two references showing similar behavior (invalid reference) are the TestStand App Manager control and the "Current VI's Menubar" reference.  The App Mgr control is on the front panel of the UI Actor's Actor Core.vi.  The menubar reference is retrieved in the block diagram of the UI Actor's Actor Core.vi
    Now,
    When I run the Main VI I get an error in the TestStand Actor's Actor Core.vi (Remember Main VI launches UI Actor launches TestStand Actor) because the App Mgr and menubar references are invalid (.  I have checked and verified that in this scenario the references are valid in the UI Actor before it launches the teststand actor. 
    If I run the UI Actor's Actor Core.vi stand alone (i.e. run it top level) the App Mgr and menubar references are passed to the teststand actor, no error occurs, and the code functions as expected. 
    Why would these references be invalid by simply starting a different top level VI?  Could it have something to do with when the references are passed vs. when the front panel is loaded into memory?
    I tried putting the App Mgr control on the front panel of the Main VI and passing it to the UI Actor and then to the TestStand Actor.  This works.... 
    Anyone have any experience or knowledge to why this is occurring?

    Generally, references in LV are "owned" by the hierarchy they are first created in, and the hierarchy is determined by the top level VI. Once the hierarchy goes idle or out of memory, the references created by that hierarchy are automatically closed. That's usually what causes something like this - the reference is created in one hierarchy (let's say the main VI hierarchy) and then that hierarchy stops running.
    I don't know the AF well enough to say if that's really the case (I actually thought that it always launches a separate top level dynamic process, which I assumed is where the UI actor's core VI would always be called), but that might help explain it. If not, you might wish to post to the AF group in the communities section.
    Try to take over the world!

  • Custom Branding Using the AJAX Framework L-Shape APIs

    Hello folks,
    i want to do this Tutorial (How To Apply Custom Branding Using the AJAX Framework L-Shape APIs) but i'm missing the source code.
    Can anyone of you provide me with the necessary files?!
    It was once located in Sap Code-Exchange (https://code.sdn.sap.com/svn/sap-portal-ajax-framework)
    Thanks in advance.
    Greetings,

    I downloaded in May 2014 two EARs with a custom AFP from SAP:
    com.customer.afp.fromscratch.ear
    com.customer.sdesign.ear
    I also have the images shown in the pdf....
    If interested, send me an email (see profile).
    Kai

  • 'ServerProperty' with 'Name' = 'Language' does not exist in the collection

    LS,
    One of my customers (using ssas 2012) is facing collation issues which result in missing facts in the cubes. I suggested them  to have a look at the Analysis Server Properties. Howevere, on selection of the Analysis Services Properties page 'Language-Collation',
    it doesn't open the page showing the properties, but instead the following message pops up:
    'ServerProperty' with 'Name' = 'Language' does not exist in the collection
    Any ideas on what could have caused this and how it can be fixed ?
    We're considereing a restart of the SSAS server, but need to be very carefull because it's their production environment.
    Appreciate your help,
    Kind regards,
    Cees
    Please remember to mark replies as answers or at least vote helpfull if they help and unmark them if they provide no help.

    I am also experiencing this error when clicking on the Language/Collation page of the Analysis Services Properties dialog.
    I suspect this is causing some other strange behavior such as an "invalid characters in hierarchy names" error when deploying an SSAS database, when the same solution/project can be deployed successfully from other machines. In that case, there are parenthesis
    in the attribute name but no user-defined hierarchies. Error:
    Errors in the metadata manager. The name, 'Project ID (Description)', for the cube hierarchy is not valid because this name is a reserved word, contains one or more invalid characters (.,;'`:/\*|?"&%$!+=()[]{}<>), or is longer than 100 characters.
    I would like to avoid having to re-install SSAS if at all possible. Any help is much appreciated.
    LB

  • I created a form and I'm not sure how to make the 'submit' button send me the collected information.

    Hello everybody. I am a web designer (NOT a developer)
    I created a form and I'm not sure how to make the 'submit' button send me the collected information.
    I have used phpform.org/ to custom build a submission form. Then I opened that html in dreamweaver (so that I could edit colors, fonts, and delete the phpform.org advetisement)
    Now I need to link the 'submit button' so that it will e-mail me the completed form.
    (formphp.org wants me to subscribe to a servie that I pay for in order to have the form e-mailed to myself.)
    (after I get the submit button linked to an e-mail I will pull the html of my completed form into Muse- but I don't think that is really relevent)
    I'm sure one of you can help point me in the right direction! I can't write my own code so detailed help is appreciated!
    -Brenna
    The e-mail I would like the form sent to is:
    [email protected]
    Here is the the code for my form 'as is' :
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Create a Profile</title>
    <link rel="stylesheet" type="text/css" href="file:///C|/Users/Tommy/AppData/Local/Temp/Temp1_form.zip/form/view.css" media="all">
    <script type="text/javascript" src="file:///C|/Users/Tommy/AppData/Local/Temp/Temp1_form.zip/form/view.js"></script>
    </head>
    <body id="main_body" >
              <img id="top" src="file:///C|/Users/Tommy/AppData/Local/Temp/Temp1_form.zip/form/top.png" alt="">
              <div id="form_container">
                        <h1><a>Create a Profile</a></h1>
                <form id="form_836144" class="appnitro" enctype="multipart/form-data" method="post" action="">
                        <div class="form_description">
                                  <h2 align="center">Create a Tommy Lemonade Profile</h2>
                                  <p></p>
                        </div>
                          <ul >
                                              <li id="li_1" >
                        <label class="description" for="element_1">Name </label>
                        <span>
                                  <input id="element_1_1" name= "element_1_1" class="element text" maxlength="255" size="8" value=""/>
                                  <label>First</label>
                        </span>
                        <span>
                                  <input id="element_1_2" name= "element_1_2" class="element text" maxlength="255" size="14" value=""/>
                                  <label>Last</label>
                        </span>
                        </li>                    <li id="li_23" >
                        <label class="description" for="element_23">Service Provider Type </label>
                        <span>
                                  <input id="element_23_1" name="element_23_1" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_1">Barber</label>
    <input id="element_23_2" name="element_23_2" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_2">Hairstylist</label>
    <input id="element_23_3" name="element_23_3" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_3">Nail Technician</label>
    <input id="element_23_4" name="element_23_4" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_4">Massage Therapist</label>
    <input id="element_23_5" name="element_23_5" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_5">Skin Care</label>
    <input id="element_23_6" name="element_23_6" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_6">Esthetician</label>
    <input id="element_23_7" name="element_23_7" class="element checkbox" type="checkbox" value="1" />
    <label class="choice" for="element_23_7">Make Up Artist</label>
                        </span><p class="guidelines" id="guide_23"><small>Select all that apply.</small></p>
                        </li>                    <li id="li_19" >
                        <label class="description" for="element_19">Top 5 services </label>
                        <div>
                                  <textarea id="element_19" name="element_19" class="element textarea medium"></textarea>
                        </div><p class="guidelines" id="guide_19"><small>Please list your top 5 services</small></p>
                        </li>                    <li id="li_20" >
                        <label class="description" for="element_20">List all services you offer & thier starting price </label>
                        <div>
                                  <textarea id="element_20" name="element_20" class="element textarea medium"></textarea>
                        </div><p class="guidelines" id="guide_20"><small>please use a new line for each service. You can do this by pressing 'enter' after each starting price.
    </small></p>
                        </li>                    <li id="li_12" >
                        <label class="description" for="element_12">Personal Phone </label>
                        <span>
                                  <input id="element_12_1" name="element_12_1" class="element text" size="3" maxlength="3" value="" type="text"> -
                                  <label for="element_12_1">(###)</label>
                        </span>
                        <span>
                                  <input id="element_12_2" name="element_12_2" class="element text" size="3" maxlength="3" value="" type="text"> -
                                  <label for="element_12_2">###</label>
                        </span>
                        <span>
                                   <input id="element_12_3" name="element_12_3" class="element text" size="4" maxlength="4" value="" type="text">
                                  <label for="element_12_3">####</label>
                        </span>
                        <p class="guidelines" id="guide_12"><small>Only fill in if you want clients to be able to contact you on your personal phone line rather than the phone at your place of employment. </small></p>
                        </li>                    <li id="li_21" >
                        <label class="description" for="element_21">E-mail (Required)  </label>
                        <div>
                                  <input id="element_21" name="element_21" class="element text medium" type="text" maxlength="255" value=""/>
                        </div><p class="guidelines" id="guide_21"><small>Staff at Tommy Lemonade will use this e-mail as your primary contact information. it will also be seen by your potential clients.</small></p>
                        </li>                    <li id="li_6" >
                        <label class="description" for="element_6">Confirm your e-mail (Required)  </label>
                        <div>
                                  <input id="element_6" name="element_6" class="element text medium" type="text" maxlength="255" value=""/>
                        </div><p class="guidelines" id="guide_6"><small>Please re-type your e-mail address</small></p>
                        </li>                    <li id="li_3" >
                        <label class="description" for="element_3">Web Site </label>
                        <div>
                                  <input id="element_3" name="element_3" class="element text medium" type="text" maxlength="255" value="http://"/>
                        </div><p class="guidelines" id="guide_3"><small>If you don't have your own website feel free to link your professional Facebook, Google+ etc... </small></p>
                        </li>                    <li id="li_4" >
                        <label class="description" for="element_4">Place of employment </label>
                        <div>
                                  <input id="element_4" name="element_4" class="element text medium" type="text" maxlength="255" value=""/>
                        </div>
                        </li>                    <li id="li_2" >
                        <label class="description" for="element_2">Work Address </label>
                        <div>
                                  <input id="element_2_1" name="element_2_1" class="element text large" value="" type="text">
                                  <label for="element_2_1">Street Address</label>
                        </div>
                        <div>
                                  <input id="element_2_2" name="element_2_2" class="element text large" value="" type="text">
                                  <label for="element_2_2">Address Line 2</label>
                        </div>
                        <div class="left">
                                  <input id="element_2_3" name="element_2_3" class="element text medium" value="" type="text">
                                  <label for="element_2_3">City</label>
                        </div>
                        <div class="right">
                                  <input id="element_2_4" name="element_2_4" class="element text medium" value="" type="text">
                                  <label for="element_2_4">State / Province / Region</label>
                        </div>
                        <div class="left">
                                  <input id="element_2_5" name="element_2_5" class="element text medium" maxlength="15" value="" type="text">
                                  <label for="element_2_5">Postal / Zip Code</label>
                        </div>
                        <div class="right">
                                  <select class="element select medium" id="element_2_6" name="element_2_6">
                                  <option value="" selected="selected"></option>
    <option value="Afghanistan" >Afghanistan</option>
    <option value="Albania" >Albania</option>
    <option value="Algeria" >Algeria</option>
    <option value="Andorra" >Andorra</option>
    <option value="Antigua and Barbuda" >Antigua and Barbuda</option>
    <option value="Argentina" >Argentina</option>
    <option value="Armenia" >Armenia</option>
    <option value="Australia" >Australia</option>
    <option value="Austria" >Austria</option>
    <option value="Azerbaijan" >Azerbaijan</option>
    <option value="Bahamas" >Bahamas</option>
    <option value="Bahrain" >Bahrain</option>
    <option value="Bangladesh" >Bangladesh</option>
    <option value="Barbados" >Barbados</option>
    <option value="Belarus" >Belarus</option>
    <option value="Belgium" >Belgium</option>
    <option value="Belize" >Belize</option>
    <option value="Benin" >Benin</option>
    <option value="Bhutan" >Bhutan</option>
    <option value="Bolivia" >Bolivia</option>
    <option value="Bosnia and Herzegovina" >Bosnia and Herzegovina</option>
    <option value="Botswana" >Botswana</option>
    <option value="Brazil" >Brazil</option>
    <option value="Brunei" >Brunei</option>
    <option value="Bulgaria" >Bulgaria</option>
    <option value="Burkina Faso" >Burkina Faso</option>
    <option value="Burundi" >Burundi</option>
    <option value="Cambodia" >Cambodia</option>
    <option value="Cameroon" >Cameroon</option>
    <option value="Canada" >Canada</option>
    <option value="Cape Verde" >Cape Verde</option>
    <option value="Central African Republic" >Central African Republic</option>
    <option value="Chad" >Chad</option>
    <option value="Chile" >Chile</option>
    <option value="China" >China</option>
    <option value="Colombia" >Colombia</option>
    <option value="Comoros" >Comoros</option>
    <option value="Congo" >Congo</option>
    <option value="Costa Rica" >Costa Rica</option>
    <option value="Côte d'Ivoire" >Côte d'Ivoire</option>
    <option value="Croatia" >Croatia</option>
    <option value="Cuba" >Cuba</option>
    <option value="Cyprus" >Cyprus</option>
    <option value="Czech Republic" >Czech Republic</option>
    <option value="Denmark" >Denmark</option>
    <option value="Djibouti" >Djibouti</option>
    <option value="Dominica" >Dominica</option>
    <option value="Dominican Republic" >Dominican Republic</option>
    <option value="East Timor" >East Timor</option>
    <option value="Ecuador" >Ecuador</option>
    <option value="Egypt" >Egypt</option>
    <option value="El Salvador" >El Salvador</option>
    <option value="Equatorial Guinea" >Equatorial Guinea</option>
    <option value="Eritrea" >Eritrea</option>
    <option value="Estonia" >Estonia</option>
    <option value="Ethiopia" >Ethiopia</option>
    <option value="Fiji" >Fiji</option>
    <option value="Finland" >Finland</option>
    <option value="France" >France</option>
    <option value="Gabon" >Gabon</option>
    <option value="Gambia" >Gambia</option>
    <option value="Georgia" >Georgia</option>
    <option value="Germany" >Germany</option>
    <option value="Ghana" >Ghana</option>
    <option value="Greece" >Greece</option>
    <option value="Grenada" >Grenada</option>
    <option value="Guatemala" >Guatemala</option>
    <option value="Guinea" >Guinea</option>
    <option value="Guinea-Bissau" >Guinea-Bissau</option>
    <option value="Guyana" >Guyana</option>
    <option value="Haiti" >Haiti</option>
    <option value="Honduras" >Honduras</option>
    <option value="Hong Kong" >Hong Kong</option>
    <option value="Hungary" >Hungary</option>
    <option value="Iceland" >Iceland</option>
    <option value="India" >India</option>
    <option value="Indonesia" >Indonesia</option>
    <option value="Iran" >Iran</option>
    <option value="Iraq" >Iraq</option>
    <option value="Ireland" >Ireland</option>
    <option value="Israel" >Israel</option>
    <option value="Italy" >Italy</option>
    <option value="Jamaica" >Jamaica</option>
    <option value="Japan" >Japan</option>
    <option value="Jordan" >Jordan</option>
    <option value="Kazakhstan" >Kazakhstan</option>
    <option value="Kenya" >Kenya</option>
    <option value="Kiribati" >Kiribati</option>
    <option value="North Korea" >North Korea</option>
    <option value="South Korea" >South Korea</option>
    <option value="Kuwait" >Kuwait</option>
    <option value="Kyrgyzstan" >Kyrgyzstan</option>
    <option value="Laos" >Laos</option>
    <option value="Latvia" >Latvia</option>
    <option value="Lebanon" >Lebanon</option>
    <option value="Lesotho" >Lesotho</option>
    <option value="Liberia" >Liberia</option>
    <option value="Libya" >Libya</option>
    <option value="Liechtenstein" >Liechtenstein</option>
    <option value="Lithuania" >Lithuania</option>
    <option value="Luxembourg" >Luxembourg</option>
    <option value="Macedonia" >Macedonia</option>
    <option value="Madagascar" >Madagascar</option>
    <option value="Malawi" >Malawi</option>
    <option value="Malaysia" >Malaysia</option>
    <option value="Maldives" >Maldives</option>
    <option value="Mali" >Mali</option>
    <option value="Malta" >Malta</option>
    <option value="Marshall Islands" >Marshall Islands</option>
    <option value="Mauritania" >Mauritania</option>
    <option value="Mauritius" >Mauritius</option>
    <option value="Mexico" >Mexico</option>
    <option value="Micronesia" >Micronesia</option>
    <option value="Moldova" >Moldova</option>
    <option value="Monaco" >Monaco</option>
    <option value="Mongolia" >Mongolia</option>
    <option value="Montenegro" >Montenegro</option>
    <option value="Morocco" >Morocco</option>
    <option value="Mozambique" >Mozambique</option>
    <option value="Myanmar" >Myanmar</option>
    <option value="Namibia" >Namibia</option>
    <option value="Nauru" >Nauru</option>
    <option value="Nepal" >Nepal</option>
    <option value="Netherlands" >Netherlands</option>
    <option value="New Zealand" >New Zealand</option>
    <option value="Nicaragua" >Nicaragua</option>
    <option value="Niger" >Niger</option>
    <option value="Nigeria" >Nigeria</option>
    <option value="Norway" >Norway</option>
    <option value="Oman" >Oman</option>
    <option value="Pakistan" >Pakistan</option>
    <option value="Palau" >Palau</option>
    <option value="Panama" >Panama</option>
    <option value="Papua New Guinea" >Papua New Guinea</option>
    <option value="Paraguay" >Paraguay</option>
    <option value="Peru" >Peru</option>
    <option value="Philippines" >Philippines</option>
    <option value="Poland" >Poland</option>
    <option value="Portugal" >Portugal</option>
    <option value="Puerto Rico" >Puerto Rico</option>
    <option value="Qatar" >Qatar</option>
    <option value="Romania" >Romania</option>
    <option value="Russia" >Russia</option>
    <option value="Rwanda" >Rwanda</option>
    <option value="Saint Kitts and Nevis" >Saint Kitts and Nevis</option>
    <option value="Saint Lucia" >Saint Lucia</option>
    <option value="Saint Vincent and the Grenadines" >Saint Vincent and the Grenadines</option>
    <option value="Samoa" >Samoa</option>
    <option value="San Marino" >San Marino</option>
    <option value="Sao Tome and Principe" >Sao Tome and Principe</option>
    <option value="Saudi Arabia" >Saudi Arabia</option>
    <option value="Senegal" >Senegal</option>
    <option value="Serbia and Montenegro" >Serbia and Montenegro</option>
    <option value="Seychelles" >Seychelles</option>
    <option value="Sierra Leone" >Sierra Leone</option>
    <option value="Singapore" >Singapore</option>
    <option value="Slovakia" >Slovakia</option>
    <option value="Slovenia" >Slovenia</option>
    <option value="Solomon Islands" >Solomon Islands</option>
    <option value="Somalia" >Somalia</option>
    <option value="South Africa" >South Africa</option>
    <option value="Spain" >Spain</option>
    <option value="Sri Lanka" >Sri Lanka</option>
    <option value="Sudan" >Sudan</option>
    <option value="Suriname" >Suriname</option>
    <option value="Swaziland" >Swaziland</option>
    <option value="Sweden" >Sweden</option>
    <option value="Switzerland" >Switzerland</option>
    <option value="Syria" >Syria</option>
    <option value="Taiwan" >Taiwan</option>
    <option value="Tajikistan" >Tajikistan</option>
    <option value="Tanzania" >Tanzania</option>
    <option value="Thailand" >Thailand</option>
    <option value="Togo" >Togo</option>
    <option value="Tonga" >Tonga</option>
    <option value="Trinidad and Tobago" >Trinidad and Tobago</option>
    <option value="Tunisia" >Tunisia</option>
    <option value="Turkey" >Turkey</option>
    <option value="Turkmenistan" >Turkmenistan</option>
    <option value="Tuvalu" >Tuvalu</option>
    <option value="Uganda" >Uganda</option>
    <option value="Ukraine" >Ukraine</option>
    <option value="United Arab Emirates" >United Arab Emirates</option>
    <option value="United Kingdom" >United Kingdom</option>
    <option value="United States" >United States</option>
    <option value="Uruguay" >Uruguay</option>
    <option value="Uzbekistan" >Uzbekistan</option>
    <option value="Vanuatu" >Vanuatu</option>
    <option value="Vatican City" >Vatican City</option>
    <option value="Venezuela" >Venezuela</option>
    <option value="Vietnam" >Vietnam</option>
    <option value="Yemen" >Yemen</option>
    <option value="Zambia" >Zambia</option>
    <option value="Zimbabwe" >Zimbabwe</option>
                                  </select>
                        <label for="element_2_6">Country</label>
              </div>
                        </li>                    <li id="li_5" >
                        <label class="description" for="element_5">Work Phone </label>
                        <span>
                                  <input id="element_5_1" name="element_5_1" class="element text" size="3" maxlength="3" value="" type="text"> -
                                  <label for="element_5_1">(###)</label>
                        </span>
                        <span>
                                  <input id="element_5_2" name="element_5_2" class="element text" size="3" maxlength="3" value="" type="text"> -
                                  <label for="element_5_2">###</label>
                        </span>
                        <span>
                                   <input id="element_5_3" name="element_5_3" class="element text" size="4" maxlength="4" value="" type="text">
                                  <label for="element_5_3">####</label>
                        </span>
                        <p class="guidelines" id="guide_5"><small>Please enter the phone number of the establishment where you work if applicable. </small></p>
                        </li>                    <li id="li_22" >
                        <label class="description" for="element_22">Schedule </label>
                        <div>
                                  <textarea id="element_22" name="element_22" class="element textarea medium"></textarea>
                        </div><p class="guidelines" id="guide_22"><small>Please feel free to include your schedule. What days you work, when are you days off, be sure to include your hours available (example: 9am-7pm) or if you have any 'by appointment only' days. </small></p>
                        </li>                    <li id="li_7" >
                        <label class="description" for="element_7">Profile Picture </label>
                        <div>
                                  <input id="element_7" name="element_7" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_8" >
                        <label class="description" for="element_8">Portfolio image  </label>
                        <div>
                                  <input id="element_8" name="element_8" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_9" >
                        <label class="description" for="element_9">Portfolio image  </label>
                        <div>
                                  <input id="element_9" name="element_9" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_10" >
                        <label class="description" for="element_10">Portfolio image  </label>
                        <div>
                                  <input id="element_10" name="element_10" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_11" >
                        <label class="description" for="element_11">Portfolio image  </label>
                        <div>
                                  <input id="element_11" name="element_11" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_13" >
                        <label class="description" for="element_13">Portfolio image  </label>
                        <div>
                                  <input id="element_13" name="element_13" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_14" >
                        <label class="description" for="element_14">Portfolio image  </label>
                        <div>
                                  <input id="element_14" name="element_14" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_15" >
                        <label class="description" for="element_15">Portfolio image  </label>
                        <div>
                                  <input id="element_15" name="element_15" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_16" >
                        <label class="description" for="element_16">Portfolio image  </label>
                        <div>
                                  <input id="element_16" name="element_16" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_17" >
                        <label class="description" for="element_17">Portfolio image  </label>
                        <div>
                                  <input id="element_17" name="element_17" class="element file" type="file"/>
                        </div> 
                        </li>                    <li id="li_18" >
                        <label class="description" for="element_18">Portfolio image  </label>
                        <div>
                                  <input id="element_18" name="element_18" class="element file" type="file"/>
                        </div> 
                        </li>
                            <li class="buttons">
                              <input type="hidden" name="form_id" value="836144" />
                        <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
                            </li>
                          </ul>
                        </form>
                        <div id="footer">
                        </div>
              </div>
              <img id="bottom" src="file:///C|/Users/Tommy/AppData/Local/Temp/Temp1_form.zip/form/bottom.png" alt="">
              </body>
    </html>

    I'm afraid not.    It's not rocket science but you need to do some coding. 
    You'll need to find a script (php) and save it to your local site folder.  Then reference the script in your form's action attribute like so.
         <form action="path/form-to-email-script.php" >
    The input fields in your HTML form need to exactly match the script variables. 
    I'm  assuming you're hosted on a Linux server which uses PHP code.  Linux servers are also case sensitive, so upper case names are not the same as lower case names.  It's usually best to use all lower case names in your form and script to avoid confusion.
    Related Links:
    Formm@ailer PHP from DB Masters
    http://dbmasters.net/index.php?id=4
    Tectite
    http://www.tectite.com/formmailpage.php
    If this is all a bit beyond your skill set, look at:
    Wufoo.com (on-line form service)
    http://wufoo.com/
    Nancy O.

  • Using a security group to add members to the collection question

    Hi,
    I have a collection created in SCCM 2007 that is using a security group for membership. So I added a computer to the security group in AD but when I go to SCCM and click on the collection I dont see the computer in the collection. Should it show here or
    because it is a security group based membership will it not show the members?
    THanks!

    Details from Active directory are added to SCCM database through discovery methods. Please ensure that AD security group discovery and AD system discovery are enabled in the primary site. If they are enabled, check the frequency set for these discovery
    methods. Once you added these computers to the AD group, you need to wait till the next discovery cycle before it appears in SCCM collections. Till that point, SCCM database will not have information about the group memberships of these computers

  • In Lightroom mobile how can move photos within the collection????

    In Lightroom mobile how can move photos within the collection????

    What you can do is to move (or copy) a photo form one collection to another. This can be triggered via the top right app menu item from grid view. Same menu is available when you open up an image for editing. Hope that helps. -Guido

  • Creating a collection from a query in Apex 4.2 is not populating the data into the collection.

    I have a process that creates a collection with data from multiple tables. The query returns multiple rows in 'Sql commands' tab. The same query is used to create the collection in 'Before Header' and when i create a region with Region source as
    Select * From apex_collections Where collection_name = 'load_dashboard';
    At the time of rendering the page shows me 'no data found'.
    what could be the problem? Are there any prerequisites before creating the collection?
    Thanks in Advance,
    Sriram

    Hi Denes,
    Below is my code for creating and saving data into the collection.
    if apex_collection.collection_exists(p_collection_name =>'load_dashboard') then
       apex_collection.delete_collection(
             p_collection_name =>'load_dashboard');
    end if;
    apex_collection.create_collection_from_query(
        p_collection_name => 'load_dashboard',
        p_query => 'select a.rowid
                   ,b.first_name
                   ,b.last_name
                   ,c.job_title
                   ,d.parent
                   ,d.child_level_1
                   ,d.child_level_2
                   ,a.resource_allocation
                   ,a.person_id
                   ,a.month_id
                   ,a.oracom_project_id    ,wwv_flow_item.md5(a.rowid,b.first_name,b.last_name,c.job_title,d.parent,d.child_level_1,d.child_level_2,a.resource_allocation,a.person_id,a.month_id,a.oracom_project_id)
    from oracom_resource_management a, oracom_people b,oracom_job c ,oracom_project d where a.supervisor_id=886302415 and a.month_id=201312 and a.oracom_job_id=c.job_id and a.person_id=b.person_id and a.oracom_project_id=d.oracom_project_id',
       p_generate_md5 => 'YES'
    Sriram.

Maybe you are looking for

  • Low memory and app crashes

    anybody else getting low memory warnings when using certain apps? is there a fix for this? say deleting apps?

  • STO 'S  REPORT

    HI Guru's..   i need a report on sto's ,  in  my requirement    using transactions  me21n " create for stand transfer P.O number.                                 vl10g, " delivery                                 migo.  " goods receipt    suggest me h

  • Can user name in help forum be changed

    I created a Firefox account with a user name but I would like to change it. Is that possible?

  • Access Fon Spots overseas

    Use Telstra Air® overseas at Fon Spots If you already have the Telstra Air App, you can connect to Fon Wi-Fi hotspots, called Fon Spots, by selecting the Fon network name from the list of available Wi-Fi networks. If you haven't already used the Tels

  • Special text effects

    I'm using ID CS3. Is there a (relatively) simple way to create an effect where a headline of text is stretched so that it appears that it is being sucked into a vacuum hose? The idea is that the headline starts out on the left as normal type but prog